StringBuilder s = new StringBuilder(); if (x < 0) { String will = String.valueOf(x).substring(1); s.append('-'); boolean flag0 = true; for (int i = will.length() - 1, j = 1; i >= 0; i--) { if (will.charAt(i) == '0' && flag0) { continue; } s.append(will.charAt(i)); flag0 = false; } } else { String will = String.valueOf(x); boolean flag0 = true; for (int i = will.length() - 1, j = 0; i >= 0; i--) { if (will.charAt(i) == '0' && flag0) { continue; } s.append(will.charAt(i)); flag0 = false; } }
if (checkOutOfRange(s.toString())) { return0; }
returnInteger.parseInt(s.toString()); }
private static boolean checkOutOfRange(String will) { String max = String.valueOf(Integer.MAX_VALUE); String min = String.valueOf(Integer.MIN_VALUE);
if (will.equals("0")) { returnfalse; }
if(will.startsWith("-")) { if (will.equals(min)) { returnfalse; } if (will.length() > min.length()) { returntrue; } if (will.length() < min.length()) { returnfalse; } for (int i = 0; i < will.length(); i++) { if ((int) will.charAt(i) > (int) min.charAt(i)) { returntrue; } elseif ((int) will.charAt(i) < (int) min.charAt(i)) { returnfalse; } } returnfalse; }
if (will.equals(max)) { returnfalse; } if (will.length() > max.length()) { returntrue; } if (will.length() < max.length()) { returnfalse; } for (int i = 0; i < will.length(); i++) { if ((int) will.charAt(i) > (int) max.charAt(i)) { returntrue; } elseif ((int) will.charAt(i) < (int) max.charAt(i)) { returnfalse; } } returnfalse; }
public static void main(String[] args) {
int test = 123; System.out.println(reverse(test)); test = -123; System.out.println(reverse(test)); test = 120; System.out.println(reverse(test)); test = 1534236469; System.out.println(reverse(test)); test = -2147483648; System.out.println(reverse(test)); test = -2147483412; System.out.println(reverse(test));
} }
打印:
1 2 3 4 5 6
321 -321 21 0 0 -2143847412
思路:
就是类似暴力破解。
比较优雅的一版如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
publicstaticint reverse1(int x) { int ans = 0; while (x != 0) { intpop = x % 10; // max == 2,147,483,647 if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE /10 && pop > 7)) return0; // min == 2,147,483,648 if (ans < Integer.MIN_VALUE / 10 || (ans == Integer.MIN_VALUE /10 && pop < -8)) return0; ans = ans * 10 + pop; x /= 10; } return ans; }