leetcode 7. 整数反转
限制不使用64位整形,手动模拟
class Solution {
public int reverse(int x) {
int max=(1<<31)-1;
boolean flag=false;
if(x<0){
flag=true;
if(x==1<<31)return 0;
x=0-x;
}
int []s=new int[20];
int p=0;
while(x>0)
{
int t=x%10;
x/=10;
s[p++]=t;
}
int ans=0;
int quan=1000000000;
if(p==10)
{
if(s[0]>=3)return 0;
for(int i=1;i<p;i++)ans=ans*10+s[i];
if(flag==false&&max-s[0]*quan<ans)return 0;
if(flag&&max-s[0]*quan+1<ans)return 0;
ans= ans+s[0]*quan;
}
else
{
for(int i=0;i<p;i++)ans=ans*10+s[i];
}
if(flag)ans*=-1;
return ans;
}
}
更好的做法
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
}