zoukankan      html  css  js  c++  java
  • 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;
        }
    }			
    

      

  • 相关阅读:
    Hibernate--Day01
    Java语言基础之数组
    Java语言基础之方法的设计
    Jmeter-文件目录
    Jmeter-简介及安装
    测试基础-测试策略与类型
    测试基础-软件测试计划
    测试基础-软件测试流程与测试模型
    测试基础-软件测试的环境
    测试基础-软件测试目的与对象
  • 原文地址:https://www.cnblogs.com/wtzmz/p/12866512.html
Copyright © 2011-2022 走看看