1. 程式人生 > >LeetCode演算法題7:反轉整數

LeetCode演算法題7:反轉整數

給定一個 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,所以這樣取餘出來的數就不是我們預期的值,需要更多的判斷。因此上面的程式應該是比較簡單的了。