題目來源:
題目分析:
本題要我們判斷一個整數是否是迴文數,Do this without extra space.這句,當時我的理解是說在輸入時不要留有空格,因此我寫的程序較爲簡單,沒有判斷溢出等情況,有大神的理解是說不佔用其他空間,因此不能將整數轉化爲其他形式來進行處理,我下面也會進行相應的討論。
題目解答:
先附上我寫的代碼,通過了感覺有點神奇,因爲我沒有考慮溢出的情況,要是有大神來解釋一下不勝感激!!!
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if(x>=0):
if(x==int((str(x))[::-1])):
return True
else:
return False
else:
return False
如果按照不能申請額外空間來做,則可以考慮將int型數據翻轉過來,這是要注意不能超過其溢出範圍(32位)
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if(x<0):
return False
else:
ans=0
b=x
while(x>=0):
ans=ans*10+x%10
if (ans>2**32/2):
return False
x//=10
if(b==ans):
return True
但是將其寫在網頁中,貌似不能編譯成功,因爲時間複雜度過高。上面的代碼中需要注意的是在python3中,/表示浮點數除法,返回浮點數結果,//表示整數除法,返回整數結果。
第三種方法有一定的技巧性,思路其實比較容易理解,但就是在寫代碼的判斷條件上需要比較注意,這次碰到了就記住吧,我在寫時真的試了很多次!!!!
它的思路在於:如果一個數是迴文,那麼我們不用將整個數倒序過來和原來的數進行比較,而是可以取它的後一半與它的前一半來進行比較,這裏就需要注意到數字個數的奇偶問題了,要注意條件的判斷,如果是一致的,則是迴文,如果不一致,則不是迴文。這種方法可以通過編譯。但是這種方法最需要注意的是需要將(x%10==0 and x!=0)這種情況單獨挑出來做判斷,不然就會出錯,切記切記!下面,附代碼:
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if(x<0 or (x%10==0 and x!=0)):
return False
else:
ans=0
while(x>=ans):
ans=ans*10+x%10
if(ans>(2**32/2-1)):
return False
x //= 10
if(x==ans or x==(ans//10)):#需要考慮到迴文是奇數的情況
return True
else:
return False
以上還有一個知識點需要注意:我們觀察到最後一個else沒有相應的if與之對應,這是怎麼回事呢?原來,在python中,else不僅可以與if搭配,還可以和while搭配,同樣還可以與try語句搭配(可省),當try語句出現異常,則進入except語句,否則執行else語句。可見文: