題目:
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%)
雖然比較慢,但我覺得跟原本比起來算是很不一樣的方法,所以分享一下
那我們下題見