题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例1:
输入: 123
输出: 321
示例2:
输入: -123
输出: -321
示例3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解法
我最一开始的解法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public int reverse(int x) { boolean isNegative = false; String xString = ""; if (x < 0) { isNegative = true; } xString = ((Integer)x).toString(); if (isNegative) { xString = xString.substring(1); } char[] c = xString.toCharArray();
for (int i = 0; i < c.length / 2 ; ++i) { char temp = c[i]; c[i] = c[c.length -1 - i]; c[c.length - 1 - i] = temp; }
xString = new String(c); int result = Integer.parseInt(xString); if (isNegative) { result -= (result * 2); } return result; }
|
当然是错的啦, 这里没有检测如果整数溢出怎么办, 所以这里需要加一个try{} catch(){}, 那么我的最后的答案是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public int reverse(int x) { boolean isNegative = false; String xString = ""; if (x < 0) { isNegative = true; } xString = ((Integer)x).toString(); if (isNegative) { xString = xString.substring(1); } char[] c = xString.toCharArray();
for (int i = 0; i < c.length / 2 ; ++i) { char temp = c[i]; c[i] = c[c.length -1 - i]; c[c.length - 1 - i] = temp; } xString = new String(c); int result = 0; try { result = Integer.parseInt(xString); if (isNegative) { result -= (result * 2); } } catch (NumberFormatException e) { return 0; } return result; }
|