[Leetcode]7. 整數(shù)反轉(zhuǎn)

題目描述:
題目難度:簡(jiǎn)單
給出一個(gè) 32 位的有符號(hào)整數(shù),你需要將這個(gè)整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)。

  • 示例 1:
    輸入: 123
    輸出: 321
  • 示例 2:
    輸入: -123
    輸出: -321
  • 示例 3:
    輸入: 120
    輸出: 21

注意:
假設(shè)我們的環(huán)境只能存儲(chǔ)得下 32 位的有符號(hào)整數(shù),則其數(shù)值范圍為 [?2^31, 2^31 ? 1]。請(qǐng)根據(jù)這個(gè)假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。

笨辦法:
該題比較簡(jiǎn)單,解題方法很直觀。所謂笨辦法,也就是第一反應(yīng)的解法,沒有經(jīng)過細(xì)節(jié)的優(yōu)化。
基本的思路是:記錄下整數(shù)的正/負(fù)符號(hào),對(duì)整數(shù)取絕對(duì)值。從低位到高位逐位左移,通過取余數(shù)得到整數(shù)的各個(gè)位,將各個(gè)位存入數(shù)組。利用數(shù)組中的數(shù)字v和索引i,就可以得到反轉(zhuǎn)后的整數(shù)的各位。索引i處的數(shù)字v,對(duì)應(yīng)反轉(zhuǎn)后的整數(shù)位為v*10 **(l-i-1),其中l(wèi)表示數(shù)組的長(zhǎng)度。注意:不要忘記把正負(fù)符號(hào)加回來,以及對(duì)超過合法范圍的情況的處理。

聰明辦法:
參考官方提示,大體的思路基本與前述方法一致。但在細(xì)節(jié)處理上可以更加簡(jiǎn)單,比如根本就不需要用到數(shù)組。具體的處理步驟如下:

  • 對(duì)于整數(shù)x,可先取絕對(duì)值abs(x),單獨(dú)記錄正負(fù)符號(hào)op,這樣就只需要處理x為正數(shù)的情況。
  • 通過以下算式得到反轉(zhuǎn)后的整數(shù)ans,ans的初始值為0。
    ans=ans*10+x%10
    x=x//10
    此算式的結(jié)束條件是x==0。
  • 單獨(dú)處理ans超過取值范圍的情況,用16進(jìn)制表示[?2^31, 2^31 ? 1]較為方便。
    return ans*op if ans<=0x7FFFFFFF else 0

笨辦法:
用時(shí)40ms,此方法擊敗了30%的用戶。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        s=[]#記錄整數(shù)的各個(gè)位
        op=1 if x>0 else -1#符號(hào)
        n=abs(x)
       hi,lo=2**31-1,-2**31
       while n>0:
           s.append(n%10)
           n=n//10
       # 注意符號(hào)
       l=len(s)
       res=0
       for i,v in enumerate(s):
           res=res+v*10**(l-i-1)
       res=op*res
       if res>=hi or res<=lo:
           return 0
       return res

聰明的方法:
同時(shí)也是簡(jiǎn)潔的方法,此方法用時(shí)36ms,擊敗了93%的用戶。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        op=1 if x>0 else -1#符號(hào)
        n=abs(x)
        ans=0
        while n>0:
            ans=ans*10+n%10
            n=n//10
        return ans*op if ans<=0x7FFFFFFF else 0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容