LeetCode 騰訊精選練習50——007 整數反轉
阿新 • • 發佈:2021-01-22
技術標籤:LeetCode 騰訊精選練習50leetcodepython演算法
LeetCode 007 整數反轉
Author: Labyrinthine Leo
Init_time: 2021.01.14
Index Words: LeetCode 007
公眾號:Leo的部落格城堡
題目
- 整數反轉
- 題號:007
- 難度:簡單
- https://leetcode-cn.com/problems/reverse-integer/
給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3
輸入: 120
輸出: 21
示例 4:
輸入: 1534236469
輸出: 0
示例 5:
輸入: -2147483648
輸出: 0
注意:
假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為[−2^31, 2^31 − 1]
。請根據這個假設,如果反轉後整數溢位那麼就返回 0。
Python實現
1、逆序取值法
思路:簡單題,簡單講一下方法。首先考慮特殊情況,提取係數,按照整數轉換,轉換方法:迴圈提取尾數並乘10,直到最後一位累加即可。例如:x = -123
,取係數k = -1
,轉正x = 123
-> 取餘x % 3
-> y = 3*10 = 30
,取x = 12
y = (30+2)*10 = 320
-> y = 320+1
-> y = k * y = -321
。
- 狀態:通過
- 執行用時: 36 ms, 在所有 python3 提交中擊敗了 90.03% 的使用者
- 記憶體消耗: 14.7 MB, 在所有 python3 提交中擊敗了 26.38% 的使用者
# coding : utf-8
# fun : Leetcode 007 整數反轉
# @Author : Labyrinthine Leo
# @Time : 2021.01.14
class Solution:
def reverse(self, x: int) -> int:
k = -1 if x < 0 else 1 # 係數
x = -x if x < 0 else x # 取正
y = 0 # 初始值
while x >= 10:
y = (y + x%10) * 10 # 取尾部餘數求值
x = x // 10
y = k * (y + x)
if y < -(2**31) or y > (2**31 - 1): # 特判
return 0
else:
return y
# 測試用例
x = 1534236469
s = Solution()
print(s.reverse(x))