Palindrome Number[LeetCode/Python3/Easy]

 


題目

給定一個整數 x,如果xPalindrome Number,則返回true,否則返回false

Palindrome Number是指正序(從左到右)和倒序(從右到左)讀都是一樣的整數。

例子 1:

輸入:x = 121
輸出:true
解釋:121從左到右和從右到左讀都是121。

例子 2:

輸入:x = -121
輸出:false
解釋:從左到右讀為-121。從右到左讀為121-。因此它不是回文數。

例子 3:

輸入:x = 10
輸出:false
解釋:從右到左讀為01。因此它不是回文數。

限制:

  • 231 <= x <= 231 - 1

進一步挑戰:

你能不將整數轉為字串來解決這個問題嗎?

我的答案

其實這是我第一個想到的答案

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x <0:
            return False
        
        String=str(x)
        if len(String)==1:
            return True
        for i in range(len(String)//2):
            if String[i] != String[-1-i]:
                return False
        return True

表現其實還不錯,打敗95.49%的人

這是我嘗試的第二種答案

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x <0:
            return False

        String=str(x)
        x_Reversed=int(String[::-1])
        if x-x_Reversed == 0:
            return True
        else:
            return False

結果表現反而比較差😂

於是就是尋找原因,結果發現 String[::-1] 的運作方式是複製了原本的 String ,然後在把原本String的內容一個一個反向輸入進去新複製的String,等同以下Code:

new = [None] * len(self)
for i in range(len(self)):
    j = len(self) - 1 - i
    new[j] = self[i]

這樣等於就是 O(n) 的操作,相比第一個解法,我只loop原始字串的一半,只要有相等就是palindrome number,算是O(n/2)就會比較快一點。

不轉換成字串的答案

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0 or (x > 0 and x%10 == 0): 
            return False
        
        result=0
        while x>result:
            result=result*10+x%10
            x=x//10
        
        if x==result or x==result//10:
            return True
        else:
            return False

表現沒有比較好耶,怎麼會這樣勒?

複習一下python indices

b = a[i:j]   # 表示复制a[i]到a[j-1],以生成新的list对象

a = [0,1,2,3,4,5,6,7,8,9]
b = a[1:3]   # [1,2]

# 当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
# 当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10]
# 当i,j都缺省时,a[:]就相当于完整复制一份a

b = a[i:j:s]    # 表示:i,j与上面的一样,但s表示步进,缺省为1.
# 所以a[i:j:1]相当于a[i:j]

# 当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
# 所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍,即倒序。

留言

這個網誌中的熱門文章

[理財/記帳]google表單結合iphone捷徑 自製記帳app

[理財/記帳]利用google表單記帳雲端化 - 免費模板下載@ Mimi's learning notes

[Excel]年份週數換算成月份