题目
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
解法:难点在于如何判断是否溢出(前提是题目中的加粗下划线,我以为题目的意思是只能用int来解题,如果可以用long,double那题目自然简单好多,解完题目发现大家都用了long和double,我真是。。。。。)在不考虑溢出的情况下解题很简单这样就可以
class Solution { public int reverse(int x) { int r=0; int temp; temp = x; while(temp/10!=0||temp%10!=0){ r=r*10+temp%10; temp /=10; } return r; } }
如果有溢出则需要判断溢出,不溢出的情况下,循环中的r,正数必然是递增的,负数递减的
class Solution { public int reverse(int x) { int r=0; int temp; temp = x; if(x>0){ while(temp/10!=0||temp%10!=0){ if(r>(r=r*10+temp%10)/10) return 0; //正数出现递减 temp /=10; } return r; } else{ while(temp/10!=0||temp%10!=0){ if(r<(r=r*10+temp%10)/10) return 0; //负数出现递增 temp /=10; } return r; } } }
看到别人的解法发现一个很好的把负数转为正数的方法,设定一个符号之int sign=1;若x<0则sign=-1;x=-1*x; 最后return -1*r;写出来更简洁。感觉自己还是蠢了,有一点一直没想明白,存不存在这种数,*10之后溢出了,但是溢出后的值比之前大?简单粗暴的用0:Integer.MAX_VALUE遍历了一下,并没有发现。