zoukankan      html  css  js  c++  java
  • 力扣(LeetCode)整数反转 个人题解

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

    示例 1:

    输入: 123
    输出: 321
    

     示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

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

    官方题解的思路是逐位取出,判断是否满足溢出的条件,并列举了可能出现的俩种情况,遇到直接返回0 。总得来说还是考察对数字的敏感。

    代码如下:

    class Solution {
        public int reverse(int x) {
            int ans=0;
            while(x!=0)
            {
                int tmp=x%10;
                x/=10;
                if (ans > Integer.MAX_VALUE/10 || (ans == Integer.MAX_VALUE / 10 && tmp > 7))
                    return 0;
                if (ans < Integer.MIN_VALUE/10 || (ans == Integer.MIN_VALUE / 10 && tmp < -8))                     
                     return 0;
                ans=ans*10+tmp;
            }
            return ans;
        }
    }            

    个人的思路是将满足10位数的数字逐位比较MAX_VALUE或者MIN_VALUE对应位置,如果不满足直接返回0 。但是这里负数的没写好,所以就不放出来了。

    看了大佬的操作,大佬直接判断反转后的数字再反转回去是否和原来对应,如果不对应,说明出现了溢出,返回0,如果对应,说明没溢出是正常的,继续操作。可以说是非常神仙的做法了。

    代码如下:

    class Solution {
        //反转后再反转看是否溢出
        public int reverse(int x) {
            int res = 0;
            while (x != 0){
                int tail = x % 10;
                int tmp = res * 10 + tail;
                if((tmp - tail) / 10 != res)return 0;
                res = tmp;
                x = x / 10;
            }
            return res;
        }
    }
  • 相关阅读:
    事务,视图,索引
    SQL 编辑
    相关子查询
    4
    3
    2
    1
    BaseEditor
    EDCheckPrefabRef
    UIUseImgWindow
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/10393557.html
Copyright © 2011-2022 走看看