整数反转
题目:
给定一个整数,可正可负,求其反转数。如果反转后整数超过 32 位的有符号整数的范围 [−2^31,
2^31 − 1] ,就返回 0,且环境不允许存储64位的整数。
另外附上:
-2^31 = -2147483648
2^31-1 = 2147483647
下面是我这个菜鸡的写法,先给你们看下,后面再附上观摩的大佬的写法。
//整数反转
class Solution {
public static int reverse(int x) {
int n=Math.abs(x);
int reserve=0;
Stack<Integer> s = new Stack<>();
while(n>0){
s.push(n%10);
n=n/10;
}
int length=s.size();
while (s.size()>0){
int a=s.pop();
reserve= (int) (reserve+ a*Math.pow(10,length-s.size()-1));
if(length==10){
if (x>0 && s.size()>0 && reserve>147483647 && s.peek()>=2) {
return 0;
}
if (x<0 && s.size()>0 && reserve>147483648 && s.peek()>=2) {
return 0;
}}
}
if (x<0)
return -reserve;
else
return reserve;
}
}
个人的写法是在太过笨重,下面学习下大佬的思路吧:
class Solution {
public int reverse(int x) {
int res = 0;
while(x!=0) {
//每次取末尾数字
int tmp = x%10;
//判断是否 大于 最大32位整数
if (res>214748364 || (res==214748364 && tmp>7)) {
return 0;
}
//判断是否 小于 最小32位整数
if (res<-214748364 || (res==-214748364 && tmp<-8)) {
return 0;
}
res = res*10 + tmp;
x /= 10;
}
return res;
}
}
还能说啥,继续加油学习吧