目录
整数反转
7. 整数反转
给你一个 32 位的有符号整数
x
,返回将x
中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围
[−231, 231 − 1]
,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123 输出:321示例 2:
输入:x = -123 输出:-321示例 3:
输入:x = 120 输出:21示例 4:
输入:x = 0 输出:0提示:
-231 <= x <= 231 - 1
题解:
①
如何反转整数?
用栈?或者变成字符串,再去反转字符串?
这两种方式是可以,但并不好。实际上我们只要能拿到这个整数的 末尾数字 就可以了。
以12345为例,先拿到5,再拿到4,之后是3,2,1,我们按这样的顺序就可以反向拼接处一个数字了,也就能达到 反转 的效果。
怎么拿末尾数字呢?模除运算②
循环的判断条件:
x>0?但这样不对,因为忽略了 负数
循环的判断条件应该是while(x!=0),无论正数还是负数,按照上面不断的/10这样的操作,最后都会变成0,所以判断终止条件就是!=0③
数值范围为
[−2^31, 2^31 − 1]
首先2^31=2147483648
所以我们在把最后一位存储到res中前判断其大小是否溢出
代码:
class Solution { public int reverse(int x) { int res=0; while(x!=0){ int temp=x%10; if(res>214748364||res==214748364&&temp>7){ return 0; } if(res<-214748364||res==-214748364&&temp<-8){ return 0; } res=res*10+temp; x/=10; } return res; } }