- 整数反转 难度[简单]
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:使用 long
public int reverse(int x) {
long n=x;
long ans=0;
while(x!=0){
long cur = x % 10;
ans=ans*10 + cur;
x/=10;
}
return (int)ans==ans ? (int)ans : 0;
}
解法二:不使用long
public int reverse(int x) {
int ans=0;
while(x!=0){
//原判断式子为 ans*10+x%10 > Integer.MAX_VALUE 但由于需要判断的数是ans所以做一个变形
//如果不加 x>0 和 x<0 , 由于补码机制Integer.MIN_VALUE-1 =2147483647 ,此时如果x=123
//则ans一定小于Integer.MIN_VALUE-1 =2147483647,会return 0,所以添加x>0 和 x<0保证ans
//会进入正确的判断语句、
if(x>0 && ans> (Integer.MAX_VALUE-x%10)/10) return 0;
if(x<0 && ans< (Integer.MIN_VALUE-x%10)/10) return 0;
int cur = x % 10;
ans=ans*10 + cur;
x/=10;
}
return ans;
}
此文章创于本人学习时的记录,如有错误或更优解还请指出