zoukankan      html  css  js  c++  java
  • 7-整数反转

    题目:

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例 1:

    输入: 123
    输出: 321
     示例 2:

    输入: -123
    输出: -321
    示例 3:

    输入: 120
    输出: 21
    注意:

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

    解答:

    • 首先想到的是字符串反转,然后类型转换,效率不行
    • 重点在于判断是否溢出,采用较长的数据类型来存储结果,下面采用的是long long,官方答案有更好的方法
    • 注意最后判断使用的方法:判断强制类型转换为int后是否与原数据相等,如果相等则没有溢出
    • while循环的判断条件:x!=0 因为x每次 /=10 最终肯定为0,这样不用判断数据是否为正负

    注意:

      写完代码后,需要找几个特殊输入进行测试,例如0 10 等情况,以减少代码bug。

    int reverse(int x) 
    {
            if (x<10 && x> -10)//只有一位的直接返回
            {
                return x;
            }
    
            long long result = 0;
            while (x != 0)
            {
                result = result*10 + (x % 10);
                x /= 10;
            }
    
            return ((int)result ==result)? (int)result : 0;
        }

     答案给的判断溢出:

    while循环中,result = result *10 + x%10; 在这里判断

    • result > MAX_INT/10,因为之后要*10再加上余数;
    • 如果 result==MAX_INT/10,则判断 x%10 是否  > MAX_INT%10,即加上的数字是否刚好超过MAX_INT的最后一位,对于32bit的int,最后一位为7
    • 如果 x < 0 按照类似的逻辑判断
    • 采用 MAX_INT%10  MIN_INT%10可以不用记住末位的数字,而且后续也好扩展
    • 上面采用long long 存储结果是取巧行为,如果要写成一个模板方法的话,直接不能用了,所以还是要分析细节
  • 相关阅读:
    [转]Convolution Neural Network (CNN) 原理与实现
    [转]深度学习CNN研究反向
    [转]一张图看懂:Google AlphaGo的原理、弱点
    [转]前馈型神经网络与反馈型神经网络的区别
    [转]认知机和神经认知机
    [转]技术向:一文读懂卷积神经网络CNN
    PHP 日期格式化 参数参考
    PHP MAIL DEMO(程序代码直接发送邮件)
    PHP上传文件DEMO
    PDO事务管理DEMO
  • 原文地址:https://www.cnblogs.com/zyk1113/p/13802957.html
Copyright © 2011-2022 走看看