1app
題目描述ide
迴文數:如一個整數,從左至右或從右至左讀法同樣,則該整數爲迴文數。spa
題目要求:給定一個數字,判斷是否爲迴文數。code
示例:輸入11,從左讀、從右讀都是11,則返回true;輸入123,從左讀爲123,從右讀爲321,不一致,所以返回false。orm
2ci
解題字符串
思路一:轉爲字符串判斷原字符串與反轉後字符串是否一致it
迴文數轉換爲字符串時,具備原字符串和反轉後字符串相同的特色,而非迴文數不具有此特色,所以能夠經過這個方式判斷是否爲迴文數。這種思路比較好理解,而且能夠發現負數都不爲迴文數(如:-11從右讀是11-),所以能夠先將負數返回false,免去後面更多計算。io
class Solution: def isPalindrome(self, x: int) : if(x<0) : return False return str(x)==''.join(reversed(str(x)))
#輸入:15#輸出:false
#輸入:1331#輸出:true
思路二:取模反轉拼接class
仔細觀察迴文數,發現將回文數後半部分進行反轉,結果跟前半部分同樣(如12321,前一半是12,後一半反轉後也是12,中間的3不影響整個判斷),所以能夠利用這個特徵經過模運算和向下取整運算,將數字後半部分反轉,而後與前半部分比對,獲得最終結果。
class Solution: def isPalindrome(self, x: int) : if(x<0 or (x%10==0 and x !=0 )) : # 相似30這種0結尾的數字都不是迴文數, # 所以首先經過與10的模運算進行排除 return False a = len(str(x)) old = x new = 0 for i in range(0,ceil(a/2)): new = new*10+old%10 # %爲模運算 old = old//10 # //爲向下取整 return new == old or old==new//10
#輸入:15#輸出:false
#輸入:1331#輸出:true