一、题目梗概
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
链接:https://leetcode-cn.com/problems/reverse-integer
示例:
输入:x = 123 输出: 321
二、解答
方案一:数学计算
class Solution {
public int reverse(int x) {
int res=0;
int flag=0;
if(x>=0) flag=1;
x=Math.abs(x);
while(x!=0){
//(res*10+x%10)>Integer.MAX_VALUE,因为限制32位,所以需要转换成下面的方程式判断
if(res>((Integer.MAX_VALUE-x%10)/10)){
return 0;
}
res=res*10+x%10;
x=x/10;
}
return flag==1?res:-res;
}
}
方案二:字符串反转,再借助try/catch判断溢出
class Solution {
public int reverse(int x) {
StringBuilder stringBuilder = new StringBuilder();
int a = Math.abs(x);
String s = new StringBuilder(String.valueOf(a)).reverse().toString();
if(x<0){
stringBuilder.append('-');
}
String s1 = stringBuilder.append(s).toString();
try{
return Integer.parseInt(s1);
}catch(Exception e){
return 0;
}
}
}