1. 程式人生 > >Leetcode# 7. Reverse Integer(位運算)

Leetcode# 7. Reverse Integer(位運算)

宣告:題目解法使用c++和Python兩種,重點側重在於解題思路和如何將c++程式碼轉換為python程式碼。

題意

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321
click to show spoilers.
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

題意

給你一個整數,若這個數在有符號32位範圍內逆序變化輸出,超出輸出0。

思路:C++語言

獲取有符號int的範圍(這裡用到了位運算的小技巧),判斷逆序後的數是否在int範圍內。

class Solution {
public:
    int reverse(int x)
    {
        int min = (1<<31)*(-1), max = (1<<31)-1;
        long long int now = 0;
        while(x)
        {
            now = now * 10 + x % 10
; x = x / 10; } if(now < min || now > max) return 0; return now; } };

思路:python語言

在python中“%”為取餘運算中
-9 % 5 = 5
9 % -5 = -5
沒有c ++中方便,這點比較麻煩,所以我們不如求逆序之前先判斷數的正負號。

class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
min = -2147483648 max = 2147483647 now = 0 flag = 0 #代表非負數 if x < 0: x = -x flag = 1 while x : now = now * 10 + x % 10 x = x / 10 if flag == 1: now = -now if now < min or now > max: return 0 return now