5.迴文數-leetcode 009(python)
阿新 • • 發佈:2018-12-12
- 題目描述
判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
- 示例1
輸入: 121 輸出: true
- 示例2
輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個迴文數。
- 示例3
輸入: 10 輸出: false 解釋: 從右向左讀, 為 01 。因此它不是一個迴文數。
- 解決方案一
受題目啟發,將整數轉換為字串,判斷正序與倒序字串是否相等
- 程式碼一
class Solution(object): def isPalindrome(self, x): """ :type x: int :rtype: bool """ flag = False str_1 = str(x) str_2 = str_1[::-1] if str_1 == str_2: flag = True return flag
- 解決方案二
首先排除x是負數的情況,肯定不是迴文數,然後依次比較x的最高位數字和最低位數字,需要藉助一個記錄當前數字x共有多少位的變數d,在比較的迴圈中,x需要不斷去掉最高位和最低位,因此每進行一次迴圈,d就需要除以100
需要注意的是,while迴圈的條件是x>0,而不是x>=10,我第一次出錯就是因為沒想清楚這個道理。執行報錯了才知道。如果輸入是1000021的話,那麼一次迴圈之後,x變為00002,仍舊需要在迴圈中進行比較,而如果按照x>=10的條件來執行,就會直接返回true的結果,出現錯誤。
- 程式碼二
class Solution(object): def isPalindrome(self, x): """ :type x: int :rtype: bool """ flag = True #如果x是負數的話,肯定不是迴文數 if x < 0: flag = False return flag #計算x共有多少位 d = 1 while x/d >= 10: d = d * 10 #迴圈取x的最高位和最低位,每次比較 #即使x是個位數,也需要在迴圈中比較,可能出現x=00002的情況 while x > 0: #q是x的最高位 q = x/d #r是x的最低位 r = x%10 if q != r: flag = False return flag #去掉x的最高位和最低位 x = x%d/10 d = d / 100 return flag