💖作者簡介:大家好,我是車神哥,府學路18號的車神🥇
📝個人主頁:應無所住而生其心的博客_府學路18號車神_CSDN博客
🎉點贊?評論?收藏 == 養成習慣(一鍵三連)😋
📖本系列主要以刷LeetCode(力扣)網站的各類題為標準,實作自我能力的提升為目標?
?希望大家多多支持🤗~一起加油 😁
- 專欄《LeetCode天梯》
周三,xdm,北京今天熱起來了還,好久沒出去玩了,哎!疫情盡快結束吧!疫情依舊反復,大家帶好口罩啊~ 繼續繼續,來,今天和車神哥一起來提升自己的Python編程和面試能力吧,刷天梯~
以下為我的天梯積分規則:
每日至少一題:一題積分+10分
若多做了一題(或多一種方法解答),則當榷訓分+20分(+10+10)
若做了三道以上,則從第三題開始算+20分(如:做了三道題則積分-10+10+20=40;做了四道題則積分–10+10+20+20=60)
初始分為100分
若差一天沒做題,則扣積分-10分(周六、周日除外注:休息)
堅持!!!
初級演算法
刷題目錄
字串

題干
給你一個 32 位的有符號整數 x ,回傳將 x 中的數字部分反轉后的結果,
如果反轉后整數超過 32 位的有符號整數的范圍 [ ? 2 31 ?2^{31} ?231, 2 31 2^{31} 231 ? 1] ,就回傳 0,
示例1:
輸入:x = 123
輸出:321
示例2:
輸入:x = -123
輸出:-321
示例3:
輸入:x = 120
輸出:21
示例4:
輸入:x = 0
輸出:0
暴力反轉
分析:
我們的數字長度可能超過32位,也可能不超過,則設定兩個條件;由于是有符號的數,那我們符號得保留下來,僅對數字進行反轉,符號不變,
我們可以將數字轉換為字串單個字符放在陣列里面,然后再進行上一題的轉換,這樣就沒毛病了,
class Solution:
def reverse(self, x: int) -> int:
t = list(str(x)) # 將數字轉換成字符陣列
# t = list(map(str, str(x)))
n = len(t)
left = n-1
right = 1
right2 = 0
if t[0] == '-':
for i in range((n-1)//2):
t[right], t[left] = t[left], t[right]
right += 1
left -= 1
tt = int(''.join(t))
if tt <= (2**31-1) and tt >= (-2**31):
return tt
else:
return 0
else:
if n == 1:
return x
else:
for j in range(n//2):
t[right2], t[left] = t[left], t[right2]
right2 += 1
left -= 1
tt = int(''.join(t))
if tt<= (2**31-1) and tt >= (-2**31):
return tt
else:
return 0
感覺這個辦法很笨,也很慢,我們還需要再優化優化

直接反轉
數字嘛,我們針對數字那就直接反轉,個位十位百位千位嘛,就是系數乘以10的倍數唄、我們只需要將個位變為最高位,十位變為第二高位,以此類推,這樣會快一些,首先判斷是否為0,否則回傳0.還得判斷是否為負數,如果為負數則先統一為正,然后再添上符號,
參考一下大佬的圖片

class Solution:
def reverse(self, x: int) -> int:
flag = False # 設定識別符號
if x < 0: # 判斷正負
flag = True
x = abs(x) # 絕對值化
res = 0 # 設定初值
while x != 0:
res *= 10 # 加權移位
temp = x % 10 # 取余
x //= 10 # 地板除
res += temp # 賦值
if flag: # 回歸負
res = 0 - res
if res < 0 - 2 ** 31:
return 0
if res > 2 ** 31 - 1: # 正值
return 0
return res

速度有所提升,但記憶體消耗沒有上面的表現的好,感覺和我第一個的方法差不多,哎!~
加油吧!~
?
References
作者:力扣 (LeetCode)
鏈接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnx13t/
來源:力扣(LeetCode)
作者:資料結構和演算法
鏈接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnx13t/?discussion=ukHfZx
來源:力扣(LeetCode)
今日得分:+10 +10
總得分:370 (后面兩種走捷徑的方法就不加分了今天,哈哈)加油!!!
?堅持讀Paper,堅持做筆記,堅持學習,堅持刷力扣LeetCode?!!!
堅持刷題!!!打天梯!!!
?To Be No.1??哈哈哈哈
?創作不易?,過路能?關注、收藏、點個贊?三連就最好不過了
?( ′・?・` )
?
『
明明付出遠高于回報,卻依舊選擇硬著頭皮做下去,只為了能在還未觸及到的未來幫到你,或許這就是傻白甜吧,
』
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/347127.html
標籤:其他
