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
a|b
a^b
~a
a << 2
a >> 2
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)
文章不錯,點個在看吧!