题目
给定一个范围为 32 位 int 的整数,将其颠倒。
例 1:
输入: 123
输出: 321
例 2:
输入: -123
输出: -321
例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能处理 32 位 int 范围内的整数。根据这个假设,如果颠倒后的结果超过这个范围,则返回 0。
分析
- 负号单独处理
- /10 进行循环,data*10+%10得到新数
- 注意返回值的范围
解题
class Solution {
public int reverse(int x) {
long data = 0;
int flag = 1;
if (x < 0) {
flag = -1;
x = -x;
}
while (x != 0) {
data = data*10 + x%10;
x = x/10;
}
long ret = flag*data;
if (-1*Math.pow(2, 31) > ret || Math.pow(2, 31)-1 < ret) {
return 0;
}
return (int)ret;
}
}
启示
- 负号用 flag 处理
- int 32 位 范围 -2^31 ~ 2^31-1
优化
利用x=x*10/10判断超出范围:
- int n=i*10+x%10;
- if(n/10!=i) return 0;