1. 程式人生 > >leetcode 迴文數 (python)(進階問題:不用字串)

leetcode 迴文數 (python)(進階問題:不用字串)

剛開始刷題,第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]