leetcode 迴文數 (python)(進階問題:不用字串)
阿新 • • 發佈:2018-12-30
剛開始刷題,第9道題就是一道簡單的判斷迴文數題。原題目如下
判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
示例 1:
輸入: 121 輸出: true
示例 2:
輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個迴文數。
示例 3:
輸入: 10 輸出: false 解釋: 從右向左讀, 為 01 。因此它不是一個迴文數。
進階:
你能不將整數轉為字串來解決這個問題嗎?
當然遇到判斷迴文數本身這種題我們可以用轉字串的方式,提出一個進階問題,不用字串,思路很簡單很簡單,提取第一位第二位數互相比較
class Solution: def isPalindrome(self, x): """ :type x: int :rtype: bool """ if x<0: return False fn = x//10**(self.__shuwei(x))#首位 ln = x%10 #尾位 if x //100 == 0: #如果x小於100 x為個位或者 首尾相同True return True if x//10 ==0 or fn == ln else False if ln != fn: #首尾不同 False return False nn =x-fn*10**(self.__shuwei(x)) # 去首位 if nn-10**(self.__shuwei(x)-1)>=0: return self.isPalindrome(nn//10) #取尾位 else : #如果次首位置為零 次首位置和次尾位置個 return self.isPalindrome(nn//10+10**(self.__shuwei(x)-2)+1) def __shuwei(self,x):#計算位數 count = 0 while x: count +=1 x //= 10 return count-1
思路很簡單,注意10000110001這種資料就好
字串法簡直不要太簡單程式碼也貼上
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
def isPalindrome(self, x):
return str(x)==str(x)[::-1]