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;
    }
}


posted @ 2022-11-17 23:03  林动  阅读(5)  评论(0编辑  收藏  举报