1. 程式人生 > >基礎演算法之整數翻轉(Leetcode-7)

基礎演算法之整數翻轉(Leetcode-7)

春招第一步,演算法伴我行

計劃著每天研究幾道演算法題,各個型別儘可能都包含,自己寫出來,好做增強。基本都使用python語言編寫,主要講一下自己的思路,以及AC情況。水平不夠,大家多指正,不吝賜教,十分感謝。

題目描述:

給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。(簡單)
如:123 — 321;-123 — -321;120 —21
同時,只能儲存32位有符號整數,範圍為[-2^31, 2^31-1],翻轉後溢位返回0.

思路:

對於輸入的數,無非兩種情況:正數和負數。
正(負)數:返回的結果也是正(負)數,sign = 1 if x>0 else -1


然後就是對輸入的數字分別提取每一位再進行拼接得到最後的輸出結果,當然,前提是先將輸入變為正數。

x = abs(x)
current = []
while x>0:
	current.append(x%10)
	x = x//10
result = int(''.join(current))
return sign*result if (result>=MinNum and result<=MaxNum) else 0

完整程式碼如下:

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x == 0: return 0
        MaxNum = 2**31-1
        MinNum = -2**31
        sign = 1 if x > 0 else -1
        x = abs(x)
        current = []
        while x>0:
            current.append(str(x%10))
            x = x//10
        result = int(''.join(current))
        return result*sign if (result<MaxNum and result>MinNum) else 0

AC