美文网首页
LeetCode #7: Reverse Integer

LeetCode #7: Reverse Integer

作者: 光煜Gray | 来源:发表于2018-10-02 21:23 被阅读0次

思路

  1. 最初在想要是能把每个数字放到一个数组里面,最后反转一下数组就可以了。
  2. 然后想到其实并不需要数组储存,其实可以通过迭代不断地更新。result = result * 10 + digit
  3. 剩下的就是判断overflow的问题。
  • 最小的Int是-2,147,483,648, 最大的是2,147,483,647
  • 如果现在result大于MAX_VALUE/10, 那么result = result * 10 + digit一定会overflow
  • 如果result大于MAX_VALUE/10,那么当digit大于7的时候,result = result * 10 + digit一定会overflow
  • 负数同理

代码

class Solution {
    public int reverse(int x) {
        int result = 0;
        // 判断正负数
        int sign = (x < 0) ? -1 : 1;
        while(x != 0) {
            // 抽出末位数字
            int digit = Math.abs(x % 10);
            // 剩下的数字
            x = x / 10;
            // 判断是否overflow
            if (result > (Integer.MAX_VALUE / 10) || (result == (Integer.MAX_VALUE / 10) && digit > 7)) return 0;
            if (result < (Integer.MIN_VALUE / 10) || (result == (Integer.MIN_VALUE / 10) && digit > 8)) return 0;
            result = result * 10 + digit;
        }
        result *= sign;
        return result;
    }
}

相关文章

网友评论

      本文标题:LeetCode #7: Reverse Integer

      本文链接:https://www.haomeiwen.com/subject/leoooftx.html