LeetCode刷題DAY 1:迴文數判斷

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
相關文章
相關標籤/搜索