LeetCode每日一題 回文數

2021-10-03 14:09:04 字數 2154 閱讀 5213

【前言】堅持日更leetcode刷題系列

不積跬步,無以至千里;不積小流,無以成江海。願與諸君共勉!

【題目】9.回文數

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

示例:

示例 1:

輸入: 121

輸出: true

示例 2:

輸入: -121

輸出: false

解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是乙個回文數。

示例 3:

輸入: 10

輸出: false

解釋: 從右向左讀, 為 01 。因此它不是乙個回文數。

思路一:很顯然我們可以將此整數轉化為字串後,定義兩個列表,乙個存入原始資料,另乙個進行逆轉操作,再用列表中的eq函式進行判斷即可。**如下:

import operator

class

solution

(object):

defispalindrome

(self, x)

:"""

:type x: int

:rtype: bool

"""x =

str(x)

#將整數轉化為str型別

list1 =

list2 =

list1 =

list

(reversed

(x))

#用乙個列表存逆轉資料

list2 =

list

(x)#用另乙個列表存原始資料

result = operator.eq(list1,list2)

#呼叫eq函式判斷兩個列表是否相同

return result

執行結果:

notice:可能有朋友會自然的想到,在比較兩個列表是否相同時,直接用『==』 比較運算子,但此種比較方式,只能判斷列表內數值是否相等,而不能判斷其位置情況,例如:list[1,2,3]和list[2,1,3]在用『==』比較運算子時會返回true。

補充:看到leecode上其他前輩的寫法中,我們可以直接用str型別,而不需要將其放入list進行操作,一開始我想通過list來簡單的實現逆轉操作,可能受上一題的影響,自然而然的想到這種方法,但是我們同樣可以 通過字串的切片操作將其逆轉。

python比較兩個list相等的方法

思路二:利用模十的方法,將得到的x每個數碼用list存起來,再將其還原為整數,實現首尾數碼的調換。對於其中數碼最後一位為 0 的整數,以及符號為負的整數進行剔除,但注意其中整數為0的特例,不能進行剔除。**如下:

class

solution

(object):

defispalindrome

(self, x)

:"""

:type x: int

:rtype: bool

"""if(x!=

0and x%

10==0)

or x<0:

#剔除尾碼為0以及負數的情況

return

false

else

: original_num = x #因為之後的x值會改變,因此要存入原始x值

reversed_num =

0#逆轉之後的值

list1 =

while x>0:

10)x = x//

10for i in

range

(len

(list1)):

reversed_num = reversed_num*

10+list1[i]

if(reversed_num == original_num)

:return

true

else

:return

false

回文數進一步優化演算法(c++版)

註明:

leetcode 每日一題 回文數

數學解法 判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10 輸出 false 解釋 ...

LeetCode每日一題 回文鍊錶

題目 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 思路 判斷是否是回文,可以將鍊錶儲存在乙個陣列中,然後用兩個指標乙個指向頭,乙個指向尾,同時向中間掃瞄。演算法 複製鍊錶值到陣列列表中。使用雙指標法判斷是否為回文。cl...

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...