力扣練習 整數反轉 回文數字(python)

2021-10-01 09:08:09 字數 3392 閱讀 1220

整數反轉

總結由於這兩道題採用相同的思路,所以放在一起寫。

判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

首先將數字換變為字串,把字串的每個字元放在乙個列表中。然後生成乙個新列表,列表各元素是前乙個列表的倒序,如果這兩個列表相等,則該數字是回文數。

官方提示是:beware of overflow when you reverse the integer.

我看不懂這個提示…

class

solution

(object):

defispalindrome

(self, x)

:"""

:type x: int

:rtype: bool

"""ls_1=

list

(str

(x))

ls_2=

for i in

range

(len

(ls_1)-1

,-1,

-1):

)if ls_1 == ls_2 :

return

true

else

:return

false

執行用時 :64ms, 在所有 python 提交中擊敗了51.26%的使用者

記憶體消耗 :11.7mb, 在所有 python 提交中擊敗了25.86%的使用者

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

注意:

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

(ps:再次注意是反轉後整數溢位)

和回文數字用到的方法一樣,同樣用兩個列表來解決。但是存在以下問題:

儲存反轉後的列表如何轉換成整數

判斷給定數字是否為負的條件放在**

何時應該return 0

class

solution

(object):

defreverse

(self, x)

:"""

:type x: int

:rtype: int

"""if x <0:

a=-x else

: a=x

ls_1=

list

(str

(a))

ls_2=

for i in

range

(len

(ls_1)-1

,-1,

-1):

) ls=

''.join(ls_2)

ifint

(ls)

<=-2

**31

orint

(ls)

>=2**

31-1:

return

0if x >0:

return

int(ls)

else

:return

-int

(ls)

執行用時 :16ms, 在所有 python 提交中擊敗了93.27%的使用者

記憶體消耗 :11.6mb, 在所有 python 提交中擊敗了35.12%的使用者

用時很短比較出乎意料。與移除元素那個問題結合起來可以發現,檢索列表用時很短,但是增刪列表需要花不少時間(具體原因需要進一步的學習)。

關於正負數:python中的abs()函式可以獲得乙個數的絕對值。

關於列表轉換成整數:需要用"".join() 函式。括號裡是列表,「」中如果沒有則是將列表中所有元素連起來,如果是某字元,則將是將所有元素用該字元連起來。

還可以用列表的reverse函式來做:

回文數

class

solution

(object):

defispalindrome

(self, x)

:"""

:type x: int

:rtype: bool

"""if x <0:

return

false

ls=list

(str

(x))

ls.reverse(

) y=

int(

''.join(ls)

)if x == y:

return

true

else

:return

false

結果:

執行用時 :68ms, 在所有 python 提交中擊敗了41.89%的使用者

記憶體消耗 :11.7mb, 在所有 python 提交中擊敗了26.87%的使用者

整數反轉

class

solution

(object):

defispalindrome

(self, x)

:"""

:type x: int

:rtype: bool

"""if x <0:

return

false

ls=list

(str

(x))

ls.reverse(

) y=

int(

''.join(ls)

)if x == y:

return

true

else

:return

false

結果:

執行用時 :12ms, 在所有 python 提交中擊敗了98.12%的使用者

記憶體消耗 :11.7mb, 在所有 python 提交中擊敗了23.86%的使用者

從結果上比較兩種方法差別不大,但reverse寫起來更方便。

力扣題庫 整數反轉

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉...

力扣7 整數反轉

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉 示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21sign x 0 x正負 maxint32 1 31 1 準備int32最大值 res 0 準備結果,初始化為0 if...

力扣(7) 整數反轉

題目描述 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。思路 先轉字串,符號位單獨考慮。對只有數字的字串進行反轉,再轉為整數型,最後與符號位相乘輸出 import math class solution def reverse self,x int int label 1 ...