iT邦幫忙

0

leetcode with python:9. Palindrome Number

  • 分享至 

  • xImage
  •  

題目:

Given an integer x, return true if x is palindrome integer.
An integer is a palindrome when it reads the same backward as forward.

前後開始讀都一樣的數字稱為palindrome(ex:121),而題目要我們判斷輸入的X是否為palindrome

看到這題時我的想法

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

轉字串再從頭尾開始比,一有不一樣就return False,執行完都相同就return True
執行時間也來到58ms(faster than 94.92%)

正以為這題就要拉下帷幕時,發現題目下有一行

Could you solve it without converting the integer to a string?

討論區也不少人提出了不轉字串的寫法
於是我也嘗試寫了一個

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x<0:
            return False
        d=1
        while x>=d*10:
            d=d*10
        while x:
            if x//d!=x%10:
                return False
            x=(x%d)//10
            d=d/100
        return True

一開始負數絕對不會是palindrome所以直接回傳False
先判斷x是幾位數
再透過%及//的操作來比較頭尾
接著同樣用%及//來去頭去尾
頭尾值不同就return False
整個執行完都相同就return True
最後執行時間135ms(faster than 11.45%)

雖然比較慢,但我覺得跟原本比起來算是很不一樣的方法,所以分享一下

那我們下題見


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言