Leet Code OJ 7. Reverse Integer [Difficulty: Easy]

题目:
Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

Have you thought about this?
Here are some good questions to ask before coding. Bonus points for you if you have already thought through this!

If the integer’s last digit is 0, what should the output be? ie, cases such as 10, 100.

Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases?

For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

翻译:
反转一个整形数的数值。
你是否考虑了这些?
在写代码之前,这里有一些好问题需要被提出来讨论一下。如果你已经考虑到了这些问题,在面试中会是一个加分项。
如果整数的某位是0,那输出结果应该是怎样的?例如,像10,100这种用例。
你注意到反转后的整数可能导致溢出吗?假定输入是一个32位的整数,然后1000000003的反转后的结果会导致溢出。你怎样处理这些溢出?
考虑到这个问题,我们假定你的程序在反转溢出时返回0。

分析:
这道题目看似简单,实则非常容易出错,通过率也较低。原因在于结果溢出的处理上(根据题目的补充说明,溢出返回0),做题时,需要考虑以下几种特殊情况:
1. 在做反转的时候,我把输入的数字统一转化为正数处理。这个时候可能产生第一次溢出。
2. 当输入为类似100时,检查输出是否正确。
3. 在反转的过程中,由于可能产生溢出,我将中间结果采用long保存。
4. 将long转化为int时,需要根据输入的符号,再次判断是否溢出。

代码:

public class Solution {
    public int reverse(int x) {
        boolean flag=false;
        if(x<0){
            flag=true;
            if(-(long)x>Integer.MAX_VALUE){
                return 0;
            }
            x=-x;
        }
        long result=0;
        while(true){
            result=result*10+x%10;
            if(x<10){
                break;
            }
            x/=10;
        }

        if(flag){
            if(-result<Integer.MIN_VALUE){
                return 0;
            }
            return -(int)result;
        }
        if(result>Integer.MAX_VALUE){
            return 0;
        }
        return (int)result;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值