题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
来源:力扣(LeetCode)
链接:LeetCode
题目分析
(1)简单的整数反转,通过不断除和求余,再累加即可,余数作为每一次的累加对象,而除得到的结果作为下一次被求余的对象。
(2)形式化就是,如321这个数,321求余得到1,先令res=1,而321/10=32,用32重复同样过程,res=1*10+32%10=12,32/10=3,res=12*10+3%10=123。
(3)以上就是反转的整体思路,较为简单。
(4)但是此处根据题目描述,要避免踩坑,即要判断反转后的数是否超出了所定义的范围,比如此处考虑int型的范围,最好在res=res*10+x%10之前判断一下,可得到代码如下。
代码
class Solution {
public int reverse(int x) {
int res=0;
while(x!=0){
int tmp=x%10;
if(res<Integer.MIN_VALUE/10||(res==Integer.MIN_VALUE/10&&tmp<-8)) return 0;
//判断res是否大于最小值或者大于最大值
if(res>Integer.MAX_VALUE/10||(res==Integer.MAX_VALUE/10&&tmp>7)) return 0;
res=res*10+tmp;
x=x/10;
}
return res;
}
}