Problem
Reverse digits of an integer. Returns 0 when the reversed integer overflows (signed 32-bit integer).
Example
Given x = 123, return 321
Given x = -123, return -321
Note
这道题有一些细节需要留意。新数res会不会溢出?符号位如何处理?
用惯用的做法,n除以10取余,得到最低位cur,放进res。每次循环res乘以10累加当前最低位cur,同时n除以10不断减小。
要点在于考虑res乘10累加运算的情况,用分支语句判断发生溢出的条件。不能直接写if (res * 10 + cur > Integer.MAX_VALUE)
,因为res * 10
就有可能会溢出了;而要用(Integer.MAX_VALUE - cur) / 10
,因为只有减法和除法,结果不可能溢出。
最后的结果要加上之前排除的符号位。
Solution
public class Solution {
public int reverseInteger(int n) {
boolean isNeg = n < 0;
n = isNeg ? -n : n;
int res = 0;
while (n != 0) {
int cur = n % 10;
if (res >= (Integer.MAX_VALUE - cur) / 10) return 0;
res = res * 10 + cur;
n /= 10;
}
return isNeg ? -res : res;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。