lintcode413- Reverse Integer- easy

本文介绍了一种整数反转的方法,并详细讨论了如何在32位整数范围内正确处理反转过程中的溢出问题。提供了两种解决方案:一是通过比较新旧数值确保一致性;二是通过在每次加操作前检查当前数值是否超出界限来避免溢出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Reverse digits of an integer. Returns 0 when the reversed integer overflows (signed 32-bit integer).

Example

Given x = 123, return 321

Given x = -123, return -321

 

关键在怎么判断出overflow

法1:存好旧的old,接着先加了得new,看new/10是否与old吻合,不一样就出问题了。

法2:加下一个数字前,把当前数字 vs max/10与min/10,超了就出问题了。

 

 

细节:

1.法2不用判断正好等于的情况,因为最大数是2xxxxxxxx7(8),而唯一会溢出的就是输入int digit位满了可能反过来才会有问题,但这种情况下输入必定第一位是1或者2。如果当前是等于情况,加上1/2不会超过最后的7/8。
2.法2最大值表示可以是Integer.MAX_VALUE,或者就临时写int max = 0x7FFFFFFF; int min = 0x80000000;
3.数字倒过来循环里写的是res = res * 10 + digit;很简单的表达方式,请写熟练。 
 
实现:
法1
public class Solution {
    /*
     * @param n: the integer to be reversed
     * @return: the reversed integer
     */
    public int reverseInteger(int n) {
        // write your code here
        int res = 0;
        while (n != 0){
            int digit = n % 10;
            int temp = res * 10 + digit;
            if (temp / 10 != res){
                return 0;
            }
            res = temp;
            n /= 10;
        }
        return res;
    }
}

 

法2
public class Solution {
    /*
     * @param n: the integer to be reversed
     * @return: the reversed integer
     */
    public int reverseInteger(int n) {
        // write your code here
        int max = 0x7FFFFFFF;
        int min = 0x80000000;
        int res = 0;
        while (n != 0){
            int digit = n % 10;
            if (res > max / 10 || res < min / 10){
                return 0;
            }
            res = res * 10 + digit;
            n /= 10;
        }
        return res;
    }
}

 

转载于:https://www.cnblogs.com/jasminemzy/p/7512363.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值