LeetCode Reverse Integer

最近開始刷刷的Leetcode題,遇到了一道這麼一個簡單的題 Reverse Integer ,然而並無看上去的那麼簡單,python

特殊的坑就如這道題說的 overflow !ios

一開始天真的認爲就是每一個語言本身定義的最大整數,如c++

  在python中函數

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

在c++中:code

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

因而按照這個認識,所寫代碼以下:(選python是由於用到了python的內置函數的特性)leetcode

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

事實證實太年輕,後來仔細閱讀了提示,才發現get


原來這不是一個簡簡單單的例子的假設,而是題目要求,因而改寫爲下面的代碼:io

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

這樣結果就正常了,class

下面是用c++寫的:import

#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;
    }
};
相關文章
相關標籤/搜索