LeetCode -- 01 整数反转

打卡力扣第一天:

题目:

 

原思路: 刚看到这道题,起初认为先将整数转为字符串,再将这个字符串翻转

优秀的思路:仔细想想其实只用取整数的最后一位,(如何取最后一位? 取余的办法就好咯 !)然后再将这个数字/10,在取余,如此往复,直到这个整数/10 == 0 结束 ,所以要用循环。

举个栗子:

如果输入的数字为12345;

第一次:12345%10   得5      再将12345/10

第二次:1234%10    得4      再将1234/10

第三次: 123%10    得3     再将123/10

第四次:  12%10    得2    再将12/10

第五次: 1%10  得1    再将1/10

第六次:1/10 == 0 (结束循环)

 

其次,题目中还有个判断条件,若没有这个判断条件,这个题就上面的循环就搞定了

范围值:

2^31 = 2147483647

-2^31-1 = -2147483648

有些数字像1112223339,原数值是在范围值之内的,但是翻转后则将超出范围值,所以我们要判断 ,如何判断呢? 

在反转后的值中,我们发现只要数字到了214748365这个时候,就不用继续下去了,直接返回0,因为即便最后一位是个最小的数字0,但他的十位已经大于4了。

                              接着,如果数字等于214748364这个时候,要判断接下来这个个位是否大于7,若大于7,也将溢出,直接返回0即可。

对于负数呢,其实也是一样的,如果数字小于-214748364,溢出

                                                   如果等于-214748364,则比较最后一位,若大于8,溢出

代码:

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

  

posted @ 2020-05-11 01:26  快乐柠檬  阅读(231)  评论(0编辑  收藏  举报