题目描述
- 整数反转
给你一个 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
提示:
-2^31 <= x <= 2^31 - 1
self-题解
class Solution {
public int reverse(int x) {
//x 先取余,再除10,直到除到0跳出循环,
//注意32位指的是32个2进制位,前面有一个符号位
//判断整数是正数负数
//注意超出范围的情况
//int flag=1;
int count=0;
int ans=0;//返回值
if(x>=Integer.MAX_VALUE||x<=Integer.MIN_VALUE) return 0;
List<Integer> list=new ArrayList<Integer>();
while(x!=0){
list.add(x%10);
count++;
x=x/10;
}
for (int i=0;i<count;i++){
ans+=list.get(i)*Math.pow(10,count-i-1);
if(ans>=Integer.MAX_VALUE||ans<=Integer.MIN_VALUE){
//2147483647注意,一定要小心等于2的31次方的存在
return 0;//判断大于或者小于最大/小值的情况
}
}
//ans=ans*flag;
return ans;
}
}
注意细节,在代码中已经注释