LeetCode #7: Reverse Integer

思路

  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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容