给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
这是道Easy难度的题,感觉自己想复杂了,按所有条件筛了一遍…
class IntegerReverse {
public static int reverse(int x) {
//把x转整型
String s=x+"";
int i=0,sign=1,ans=0;
long re=ans;
//如果x是一位数直接返回,针对x=0这个用例
if(s.length()<2)
return x;
//判断符号位
if(s.charAt(i)=='+'||s.charAt(i)=='-')
{
sign=s.charAt(i)=='+'?1:-1;
//这里发现,取子串是左闭右开的
s=s.substring(1,s.length());
x*=(-1);
}
//判断最后一位是否为0
if(s.charAt(s.length()-1)=='0')
{
x/=10;
s=s.substring(0,s.length()-1);
}
for(int j=s.length()-1;j>=0;j--){
int tmp=s.charAt(j)-'0';
re=re*10+tmp;
//判断是否越界
if(re>Integer.MAX_VALUE||re<Integer.MIN_VALUE)
return 0;
}
ans=(int)re;
return sign*ans;
}
}
其实不用想那么多,负数对10取余还是负数,所以不需要单独判断符号位。8行代码搞定。
class Solution {
public int reverse(int x) {
long rev=0;
while(x!=0){
rev=rev*10+x%10;
x/=10;
if(rev>Integer.MAX_VALUE||rev<Integer.MIN_VALUE)
return 0;
}
return (int)rev;
}
}