Reverse Integer
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
溢出不意味着ans_before<ans,溢出以后可能还是大于上次的数。
解法一:采用x=reverse(reverse(x)) 的技巧判断是否溢出:
public class Solution {//采用了reverse的reverse是数字本身的思想来防止溢出。特殊:0,10 public int reverse(int x) { if(x==0) { return 0; } int temp=Math.abs(x); while(temp%10==0) { temp/=10; } if(temp!=reverse_num(reverse_num(temp))) { return 0; } if(x<0) { return -reverse_num(temp); } else return reverse_num(temp); } public int reverse_num(int x) { int ans=0; int temp=x; //boolean overflow=false;//溢出判定 while(temp!=0) { ans=ans*10+(temp%10); temp/=10; } return ans; } }
解法二:利用ans 和 Integer.MAX_VALUE/10 比较发现溢出。
public class Solution {//采用了ans和MAX_VALUE/10进行比较发现溢出。 public int reverse(int x) { int ans=0; int temp=x; while(temp!=0) { if(Math.abs(ans)>(Integer.MAX_VALUE/10)) { return 0; } ans=ans*10+(temp%10); temp/=10; } return ans; } }
1. 负数和正数不用区别对待。
2. -ans表示ans的负数。