LeetCode演算法題7:反轉整數
阿新 • • 發佈:2018-11-02
給定一個 32 位有符號整數,將整數中的數字進行反轉。
示例1:
輸入: 123
輸出: 321
示例2:
輸入: -123
輸出: -321
示例3:
輸入: 120
輸出: 21
注意:
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。根據這個假設,如果反轉後的整數溢位,則返回 0。
這個題目實在不能太簡單,記得剛學c語言的時候就做過這個題,但是這裡多加了限制條件,那就是32位的數,是有邊界的,所以只要設定好邊界就可以,但是還要注意一點,環境只能儲存32位有符號整數,所以不能等溢位了再判斷是不是溢位,只能之前判斷。
C++程式碼如下:
class Solution {
public:
int reverse(int x) {
int rev = 0;
while(x!=0)
{
int pop = x % 10;
x = x / 10;
if((rev > INT_MAX/10) || (rev == INT_MAX/10 && pop > 7))
return 0;
if((rev < INT_MIN/10) || (rev == INT_MIN/10 && pop < -8))
return 0;
rev = rev * 10 + pop;
}
return rev;
}
};
python3程式碼如下:
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x < 0:
x = -x
neg = True
else:
neg = False
rev = 0
while x != 0:
pop = x % 10
x = x // 10
if rev > (2**31-1)/10:
return 0
if rev == (2**31-1)//10 and pop > 7:
return 0
if rev < -(2**31)//10:
return 0
if rev == -(2**31)//10 and pop < -8:
return 0
rev = rev * 10 + pop
if neg == True:
rev = -rev
return rev
這裡注意一下,python3的程式碼加了正負數的判斷,這是因為//號是在除完之後取不大於除完之後的數的最大整數,所以在負數相除的時候x永遠不會為零,而是-1,所以程式不會停止,這裡其實也可以在while判斷中加上 x!=-1來避免這個問題。但是還有其他的問題,那就是python中對負數取餘也是向上取的,也就是說-7%3結果是-3餘2,所以這樣取餘出來的數就不是我們預期的值,需要更多的判斷。因此上面的程式應該是比較簡單的了。