给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:输入: -123
输出: -321
示例 3:输入: 120
输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
首先想到的是使用字符串反转,try catch处理数据溢出的问题
public int reverse(int x) {
int y=0;
String s = String.valueOf(x);
StringBuilder sb = new StringBuilder();
if (s.indexOf("-")>-1){
s=s.substring(1,s.length());
sb.append('-');
}
for (int i=s.length()-1;i>=0;i--){
sb.append(s.charAt(i));
}
try {
y=Integer.parseInt(sb.toString());
}catch (Exception e){
return 0;
}
return y;
}
虽然这种解法也可行,但是肯定不是最优解。下面的解法是参考题解和评论来的,作为学习记录一下:
public int reverse2(int x){
int num=0;
while (x!=0){
int pop = x%10;
//MAX_VALUE=2147483647,MIN_VALUE=-2147483648
if (num>Integer.MAX_VALUE/10||(num==Integer.MAX_VALUE&&pop>7)){
return 0;
}
if (num<Integer.MIN_VALUE/10||(num==Integer.MIN_VALUE&&pop<-8)){
return 0;
}
num=num*10+pop;
x=x/10;
}
return num;
}