LeetCode - 7 对整数中每位上的数字进行反转。

不借助数组、考虑溢出


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

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

示例 3:
输入: 120
输出: 21

输入:1123456789
输出:0
解释:溢出返回0

代码

/**
 * @Author: zhuda
 * @Description: invert an integer
 * @Date: Create in 20:51 2019/3/27
 */
public class Question7 {

    public static void main(String[] args) {
        System.out.println(resulterse(563847412));
    }

    public static int resulterse(int x) {
        int result = 0;
        while (x != 0) {
            int temp = x % 10;
            x /= 10;
            if (result > Integer.MAX_VALUE/10 || (result == Integer.MAX_VALUE / 10 && temp > 7)) return 0;
            if (result < Integer.MIN_VALUE/10 || (result == Integer.MIN_VALUE / 10 && temp < -8)) return 0;
            result = result * 10 + temp;
        }
        return result;
    }
}

思路

  • 32 位的整数为 int 类型
  • 每次取原数的末位,通过 “乘十加末位” 来构造原数的倒序数位
  • 考虑数字的溢出(超过最大数,小于最小数)
  • 判断溢出时,需要在上一步 “乘十” 之后就进行判断,具有前瞻性
  • 其中最后一位,还要根据具体的最大数(最小数)进行判断

注意

  • Integer.MAX_VALUE 为 java 中 int 最大的数,为 2147483647
  • Integer.MIN_VALUE 为 java 中 int 最小的数,为 -2147483648
  • java 中的 int 类型占 4 个字节(32位)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值