🌕 7. 整数反转

吞佛童子2022年6月20日
  • algorithm
  • Number
小于 1 分钟

🌕 7. 整数反转

难度: 🌕

问题描述

img_1.png


解法

class Solution {
    public int reverse(int x) {
        // 思路:
        // 首先保存最高位符号位
        // 从 低位开始遍历,每次遇到高位,之前的和 * 10 + 当前位的值
        int flag = (x > 0) ? 1 : -1;
        // 特殊情况特判
        if(x == Integer.MAX_VALUE || x == Integer.MIN_VALUE) {
            return 0;
        }
        if(flag == -1) {
            x = -x; // 因为已经排除最小值的干扰,所以取反不会超出正数范围
        }
        int sum = 0;
        while(x != 0) {
            int cur = x % 10;
            if(flag == -1) {
                // 最终结果是负数,那么 sum <= long(max + 1),max 尾号是 7
                if(sum > Integer.MAX_VALUE / 10 || (sum == Integer.MAX_VALUE / 10 && cur > 8)) {
                    return 0;
                }
            }
            if(flag == 1) {
                if(sum > Integer.MAX_VALUE / 10 || (sum == Integer.MAX_VALUE / 10 && cur > 7)) {
                    return 0;
                }
            }
            sum = sum * 10 + cur;
            x /= 10;
        }
        return sum * flag;
    }
}

输出

img.png

上次编辑于: 2022/6/20 下午8:24:47
贡献者: liuxianzhishou