1. 程式人生 > 其它 >python 取餘數判斷是否是最後一個元素_通過整數反轉學Python

python 取餘數判斷是否是最後一個元素_通過整數反轉學Python

技術標籤:python 取餘數判斷是否是最後一個元素

↑ 點選上方“靜悅悠然”關注我們

整數反轉

題目(LeetCode)

給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。

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

注意

假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為[−2**31, 2**31 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。

解法一

思路

將整數型別轉換為字串型別,判斷其第一位是否是負號,如果是則單獨提取出來,然後進行反向切片即完成了翻轉,再轉化為整數型別,最後判斷其結果是否在 [−2**31, 2**31 − 1] 內,如果在返回 0。

特點

消耗時間相對較長,記憶體消耗較小

程式碼

class Solution(object):    def reverse(self, x: int) -> int:        x = str(x)        a = ''        if x[0] == '-':            a += '-'            x = x[1:]        a += x[::-1]        x = int(a)        if x < -2 ** 31 or x > 2 ** 31 - 1:            return 0        return xtarget = -123solution = Solution()print(solution.reverse(target))
解法二

思路

將解法一中的反向切片換成 join() 方法和 reversed() 方法進行翻轉,其餘不變。

特點

消耗時間相對較少,消耗記憶體相對較多

程式碼

class Solution:    def reverse(self, x: int) -> int:        x = str(x)        b = x[0]        a = ''        if b == '-':            a += '-'            x = x[1:]        a += ''.join(reversed(x))        x = int(a)        if x < -2 ** 31 or x > 2 ** 31 - 1:            return 0        return xtarget = 123solution = Solution()print(solution.reverse(target))

知識點

  • reversed 函式返回一個反轉的迭代器。

  • Python join() 方法用於將序列(迭代器)中的元素以指定的字元連線生成一個新的字串。

解法三

思路

使用Python的算術運算子求解,迴圈將 x 的最後一個數字取出,然後放在 z 的後面,每次迴圈時檢查 z 是否溢位。

每次迴圈時,將 z 乘上 10 即個位數為 0 ,加上 y 除以 10 的餘數(即 y 的最後一位數),舉例:

51 * 10 + 752 % 10 = 510 + 2 = 512

再將 y 整除 10 向下取整,得到拿掉最後一位數之後的值,舉例:

752 // 10 = 75

特點

消耗時間相對較少,消耗記憶體相對較少

程式碼

class Solution(object):    def reverse(self, x: int) -> int:        y, z = abs(x), 0        a = (1 << 31) - 1 if x > 0 else 1 << 31        while y != 0:            z = z * 10 + y % 10            if z > a:                return 0            y //= 10        return z if x > 0 else -ztarget = -3216456solution = Solution()print(solution.reverse(target))

知識點

  • abs() 方法獲取數字的絕對值。

  • 1 << 31 等於 2 ** 31

  • y //= 10 等於 y = y // 10

python位運算子

按位運算子是把數字看作二進位制來進行計算的。Python中的按位運演算法則如下:

下例中變數 a 為 60,b 為 13,相應的二進位制格式如下:

a = 0011 1100

b = 0000 1101

  • a&b

按位與運算子:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0. (a & b) 輸出結果 12 ,二進位制解釋:0000 1100
  • a|b

按位或運算子:只要對應的二個二進位有一個為1時,結果位就為1。(a | b) 輸出結果 61 ,二進位制解釋:0011 1101
  • a^b

按位異或運算子:當兩對應的二進位相異時,結果為1(a ^ b) 輸出結果 49 ,二進位制解釋:0011 0001
  • ~a

按位取反運算子:對資料的每個二進位制位取反,即把1變為0,把0變為1 。~x 類似於-x-1(~a ) 輸出結果 -61 ,二進位制解釋:1100 0011,在一個有符號二進位制數的補碼形式。
  • a << 2

左移動運算子:運算數的各二進位全部左移若干位,由<a << 2 輸出結果 240 ,二進位制解釋:1111 0000
  • a >> 2

右移動運算子:把">>"左邊的運算數的各二進位全部右移若干位,>>右邊的數字指定了移動的位數a >> 2 輸出結果 15 ,二進位制解釋:0000 1111

python賦值運算子

  • = 簡單的賦值運算子 c = a + b 將 a + b 的運算結果賦值為 c

  • += 加法賦值運算子 c += a 等效於 c = c + a

  • -= 減法賦值運算子 c -= a 等效於 c = c - a

  • *= 乘法賦值運算子 c *= a 等效於 c = c * a

  • /= 除法賦值運算子 c /= a 等效於 c = c / a

  • %= 取模賦值運算子 c %= a 等效於 c = c % a

  • **= 冪賦值運算子 c **= a 等效於 c = c ** a

  • //= 取整除賦值運算子 c //= a 等效於 c = c // a (向下取整,例:9 // 2 = 4)

944320f9748a8c21db2ca365017279c3.png

文章不錯,點個在看吧!

8ae11c4e899aaab70a39f5b6bab4df8e.gif