iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0
自我挑戰組

Leetcode新手挑戰30天系列 第 5

#9 Palindrome Number - 研究其他種解法

前情提要

這題一開始的解題思路可能有點問題,或是程式碼寫的邏輯有問題,
想了很久,決定先來看看別人的解法,來了解自己思考有問題的點

進入正題

在網路上找到了一個解析的Youtube影片,講的挺詳細的(參考1)

  • 參考1的解法如下:
    def isPalindrome(self, x: int) -> bool:
        num = 0
        a = abs(x)
        while(a != 0):
            temp = a % 10
            num = num * 10 + temp
            a = int(a / 10)  
        if x >= 0 and x == num:
            return True
        else:
            return False

這個方法和昨天找到解題文章裡思路1應該是一樣的(參考2)

  • 參考2提供的解法:
    def isPalindrome(self, x):
        if x < 0:
            return False
        tmp = x
        y = 0
        while tmp:
            y = y*10 + tmp%10
            tmp = tmp/10
        return y == x

都是把輸入的數字算出倒轉的數字之後,判斷算出來的數字和輸入的是否相同
這兩段程式裡也都把小於0的輸入數字給判False了,因為負號放到數字後面沒辦法變成有意義的數字
在(參考2)連結裡面提到,負數和尾數是0的數字都不會是回文數.
因此如果事先把這類型的數字判成False的話,後面可以少經過很多程式碼;
另外直接把反轉數算出來比我想的用列表比字元的方式來的快速簡單.

老實說,這題看完別人的程式碼後可以了解到他們程式碼好的地方,
但原本我寫的程式碼哪裡出了問題導致爆err我還是想不出來...
希望下一題可以解的順利些@@

參考資料


上一篇
#9 Palindrome Number - 繼續解
下一篇
#66 Plus One
系列文
Leetcode新手挑戰30天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
yclin925
iT邦新手 5 級 ‧ 2022-11-13 16:53:56

感謝分享!不把input number轉成字串,純用整數來處理,難度比較高。轉成字串就很簡單了,可以參考影片:https://www.youtube.com/watch?v=mpi4QOg0Xzc
其中取得翻轉字串也可以用 x[::-1] (參考另一位邦友),不一定要用迴圈接。

我要留言

立即登入留言