LeetCode Reverse Integer
LeetCode Reverse Integer
L很失败L 发表于3年前
LeetCode Reverse Integer
  • 发表于 3年前
  • 阅读 100
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: LeetCode Reverse Integer

最近开始刷刷的Leetcode题,遇到了一道这么一个简单的题 Reverse Integer ,然而并没有看上去的那么简单,

特殊的坑就如这道题说的 overflow !

一开始天真的认为就是每个语言自己定义的最大整数,如

  在python中

>>import sys
>>print sys.maxint
>>2147483647

在c++中:

#include <iostream>
int main(){
    std::cout<< (unsigned int) -1<<std::endl; //结果是4294967295
    return 0;
}

于是按照这个认识,所写代码如下:(选python是因为用到了python的内置函数的特性)

class Solution:
    # @param {integer} x
    # @return {integer}
    def reverse(self, x):
        import sys
        if x > (sys.maxint) : return 0
        if x >= 0 : return int(str(x)[::-1]) if int(str(x)[::-1]) < sys.maxint else 0
        else: return 0-int(str(-x)[::-1]) if int(str(-x)[::-1]) < sys.maxint else 0
Input:  1534236469
Output: 9646324351
Expected:   0

事实证明太年轻,后来仔细阅读了提示,才发现


原来这不是一个简简单单的例子的假设,而是题目要求,于是改写为下面的代码:

class Solution:
    # @param {integer} x
    # @return {integer}
    def reverse(self, x):
        import sys
        if x > (2**31-1) : return 0
        if x >= 0 : return int(str(x)[::-1]) if int(str(x)[::-1]) < (2**31-1) else 0
        else: return 0-int(str(-x)[::-1]) if int(str(-x)[::-1]) < (2**31) else 0

这样结果就正常了,

下面是用c++写的:

#define max_int (1<<31)-1
class Solution {
public:
    int reverse(int num) {
    bool flag = (num<0)?0:1;//判断输入的数的正负
    num = (num>0)?num:-num;//以非负数处理
    int result = 0;
    if (num>max_int) {return 0;}
    while(num!=0){
        if (result >(max_int-num%10)/10){return 0;} //如果已经overflow,就会比max_int小,这样判断
        result = result*10 + num%10;
        std::cout<<result<<std::endl;
        num/=10;
    }
    return (flag)?result:-result;
    }
};


标签: leetcode
共有 人打赏支持
粉丝 3
博文 14
码字总数 7388
×
L很失败L
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: