给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
方法1 暴力方法,将数字转换成String,在利用String翻转,最后生成数字:
class Solution {
public int reverse(int x){
int b=1;//b用于确认正负
int x_reverse =0;
String x_tostr = String.valueOf(x);//x转换为string
//确认是否负数
if(x_tostr.charAt(0)=='-') {
b=-1;
x_tostr = x_tostr.substring(1);
}
char x_tochars[] = x_tostr.toCharArray();
int x_length = x_tochars.length;
char x_newchar[] = new char[x_length];
for(int i=0;i<x_tochars.length;i++) {
x_newchar[i] = x_tochars[x_length-1-i];
}
String x_newstr = String.valueOf(x_newchar);
//利用try catch住溢出情况,然后输出0
try {x_reverse = Integer.valueOf(x_newstr);
if(x_reverse<Integer.MIN_VALUE || x_reverse>Integer.MAX_VALUE)
return 0;
else return (int)(b*x_reverse);
}
catch(Exception e){return 0;}
}
}
方法2 利用除/余数
class Solution {
public int reverse(int x) {
int res = 0;
int pop = 0;
int max = Integer.MAX_VALUE/10;
int min = Integer.MIN_VALUE/10;
while(x!=0) {
pop = x%10;
x/=10;
if(res>max || (res==max && pop>7))
return 0;
if(res<min || (res==min && pop<-8))
return 0;
res = res*10+pop;
}
return res;
}
}