public String nearestPalindromic(String n){ int len = n.length(); long curr = Long.parseLong(n); Set<Long> set = new HashSet<>(); set.add((long)Math.pow(10,len-1)-1); set.add((long)Math.pow(10,len)+1); long t = Long.parseLong(n.substring(0,(len+1)/2)); for (long i = t-1; i<= t+1; i++){ long temp = -1; if (len%2==0){ // 如果为偶数长度 temp = getNum(i,true); }else { temp = getNum(i,false); } if (temp!=curr) set.add(temp); }
long ans = -1; for (long i:set){ if (ans == -1) ans = i; elseif (Math.abs(i-curr)<Math.abs(ans-curr)) ans = i; elseif (Math.abs(i-curr)==Math.abs(ans-curr)&& i<ans) ans = i; } return String.valueOf(ans); }
longgetNum(long k, boolean isEven){ StringBuilder sb = new StringBuilder(); sb.append(k); int index = isEven? sb.length()-1:sb.length()-2; while (index>=0){ sb.append(sb.charAt(index--)); } return Long.parseLong(sb.toString()); }