LeetCode刷题记录_反转整数

题目

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

解法:难点在于如何判断是否溢出(前提是题目中的加粗下划线,我以为题目的意思是只能用int来解题,如果可以用long,double那题目自然简单好多,解完题目发现大家都用了long和double,我真是。。。。。)在不考虑溢出的情况下解题很简单这样就可以

class Solution {
    public int reverse(int x) {
        int r=0;
        int temp;
        temp = x;
       
        while(temp/10!=0||temp%10!=0){
            r=r*10+temp%10;
            temp /=10; 
        }
        return r;  
    }
}

 如果有溢出则需要判断溢出,不溢出的情况下,循环中的r,正数必然是递增的,负数递减的

class Solution {
    public int reverse(int x) {
        int r=0;
        int temp;
        temp = x;
        if(x>0){
            while(temp/10!=0||temp%10!=0){
            if(r>(r=r*10+temp%10)/10) return 0;
            //正数出现递减
            temp /=10; 
        }
            return r;
        }
        else{
            while(temp/10!=0||temp%10!=0){            
            if(r<(r=r*10+temp%10)/10) return 0; 
            //负数出现递增
            temp /=10; 
        }
            return r;
        }
    }
}

 看到别人的解法发现一个很好的把负数转为正数的方法,设定一个符号之int sign=1;若x<0则sign=-1;x=-1*x; 最后return -1*r;写出来更简洁。感觉自己还是蠢了,有一点一直没想明白,存不存在这种数,*10之后溢出了,但是溢出后的值比之前大?简单粗暴的用0:Integer.MAX_VALUE遍历了一下,并没有发现。

猜你喜欢

转载自www.cnblogs.com/annofyf/p/9381745.html
今日推荐