Reverse Integer
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
该题要求翻转一个32位数字,主要要考虑的是精度问题防止溢出
我们用pop来获取数字的最后一位,并将其不断"push"入rev中,但是 temp=rev10+pop可能会导致溢出,所以需要我们去检查是否溢出
我们假设rev是正数,如果temp=rev10+pop会造成溢出,那么rev肯定>Integer.max/10。
如果 rev>Integer.max/10,那么 temp=rev10+pop一定会溢出。
如果 rev==Integer.max/10,那么 temp=rev10+pop溢出当且仅当 pop>7
若rev是负数,同样可行
public static int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && pop > 7))
return 0;
if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && pop < -8))
return 0;
rev = rev * 10 + pop;
}
return rev;
}