|
19 | 19 |
|
20 | 20 | */
|
21 | 21 | public class _564 {
|
| 22 | + public static class Solution1 { |
22 | 23 |
|
23 |
| - public String nearestPalindromic(String n) { |
24 |
| - if (n.length() >= 2 && allNine(n)) { |
25 |
| - String s = "1"; |
26 |
| - for (int i = 0; i < n.length() - 1; i++) { |
27 |
| - s += "0"; |
28 |
| - } |
29 |
| - s += "1"; |
30 |
| - return s; |
31 |
| - } |
32 |
| - boolean isOdd = (n.length() % 2 != 0); |
33 |
| - String left = n.substring(0, (n.length() + 1) / 2); |
34 |
| - long[] increment = {-1, 0, +1}; |
35 |
| - String ret = n; |
36 |
| - long minDiff = Long.MAX_VALUE; |
37 |
| - for (long i : increment) { |
38 |
| - String s = getPalindrom(Long.toString(Long.parseLong(left) + i), isOdd); |
39 |
| - if (n.length() >= 2 && (s.length() != n.length() || Long.parseLong(s) == 0)) { |
40 |
| - s = ""; |
41 |
| - for (int j = 0; j < n.length() - 1; j++) { |
42 |
| - s += "9"; |
| 24 | + public String nearestPalindromic(String n) { |
| 25 | + if (n.length() >= 2 && allNine(n)) { |
| 26 | + String s = "1"; |
| 27 | + for (int i = 0; i < n.length() - 1; i++) { |
| 28 | + s += "0"; |
43 | 29 | }
|
| 30 | + s += "1"; |
| 31 | + return s; |
44 | 32 | }
|
45 |
| - long diff = s.equals(n) ? Long.MAX_VALUE : Math.abs(Long.parseLong(s) - Long.parseLong(n)); |
46 |
| - if (diff < minDiff) { |
47 |
| - minDiff = diff; |
48 |
| - ret = s; |
| 33 | + boolean isOdd = (n.length() % 2 != 0); |
| 34 | + String left = n.substring(0, (n.length() + 1) / 2); |
| 35 | + long[] increment = {-1, 0, +1}; |
| 36 | + String ret = n; |
| 37 | + long minDiff = Long.MAX_VALUE; |
| 38 | + for (long i : increment) { |
| 39 | + String s = getPalindrom(Long.toString(Long.parseLong(left) + i), isOdd); |
| 40 | + if (n.length() >= 2 && (s.length() != n.length() || Long.parseLong(s) == 0)) { |
| 41 | + s = ""; |
| 42 | + for (int j = 0; j < n.length() - 1; j++) { |
| 43 | + s += "9"; |
| 44 | + } |
| 45 | + } |
| 46 | + long diff = s.equals(n) ? Long.MAX_VALUE : Math.abs(Long.parseLong(s) - Long.parseLong(n)); |
| 47 | + if (diff < minDiff) { |
| 48 | + minDiff = diff; |
| 49 | + ret = s; |
| 50 | + } |
49 | 51 | }
|
| 52 | + return ret; |
50 | 53 | }
|
51 |
| - return ret; |
52 |
| - } |
53 | 54 |
|
54 |
| - private String getPalindrom(String s, boolean isOdd) { |
55 |
| - String right = new StringBuilder(s).reverse().toString(); |
56 |
| - return isOdd ? s.substring(0, s.length() - 1) + right : s + right; |
57 |
| - } |
| 55 | + private String getPalindrom(String s, boolean isOdd) { |
| 56 | + String right = new StringBuilder(s).reverse().toString(); |
| 57 | + return isOdd ? s.substring(0, s.length() - 1) + right : s + right; |
| 58 | + } |
58 | 59 |
|
59 |
| - private boolean allNine(String s) { |
60 |
| - for (int i = 0; i < s.length(); i++) { |
61 |
| - if (s.charAt(i) != '9') { |
62 |
| - return false; |
| 60 | + private boolean allNine(String s) { |
| 61 | + for (int i = 0; i < s.length(); i++) { |
| 62 | + if (s.charAt(i) != '9') { |
| 63 | + return false; |
| 64 | + } |
63 | 65 | }
|
| 66 | + return true; |
64 | 67 | }
|
65 |
| - return true; |
66 | 68 | }
|
67 |
| - |
68 | 69 | }
|
0 commit comments