题目描述:
解题思路:
反转的方法很简单,重点在于判断溢出的问题,下面给出了两种方法。
Java代码:
方法一:
判断溢出方法:在执行完int newResult=result*10+tail语句后,紧接着进行逆运算result=(newResult-tail)/10,如果出现溢出,那么逆运算后result和newResult必然不相等,反之,如果没有溢出,则逆运算后result=newResult。
1 public class LeetCode7 { 2 public static void main(String[] args) { 3 int x1=123; 4 System.out.println(x1+"的反转结果是:"+new Solution().reverse(x1)); 5 int x2=1534236469; 6 System.out.println(x2+"的反转结果是:"+new Solution().reverse(x2)); 7 } 8 } 9 class Solution { 10 public int reverse(int x) { 11 int result=0; 12 while(x!=0){ 13 int tail=x%10; 14 int newResult=result*10+tail; 15 //判断溢出 16 if((newResult-tail)/10!=result) 17 return 0; 18 result=newResult; 19 x=x/10; 20 } 21 return result; 22 } 23 }
程序结果:
方法二:
判断溢出方法:采用long类型存储翻转后的数,再与 Integer.MAX_VALUE 和 Integer.MIN_VALUE 比较,判断是否溢出。
1 public class LeetCode7 { 2 public static void main(String[] args) { 3 int x1=123; 4 System.out.println(x1+"的反转结果是:"+new Solution().reverse(x1)); 5 int x2=1534236469; 6 System.out.println(x2+"的反转结果是:"+new Solution().reverse(x2)); 7 } 8 } 9 class Solution { 10 public int reverse(int x) { 11 long result=0; 12 while(x!=0){ 13 int tail=x%10; 14 long newResult=result*10+tail; 15 result=newResult; 16 x=x/10; 17 } 18 //根据是否溢出返回结果 19 return (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE)?0:(int)result; 20 } 21 }
程序结果:
结论:
本人比较倾向第一种方法,因为第一种方法不需要借助语言本身的常量值。