題目
現(xiàn)在給定一個(gè)整數(shù) x 稳懒,請(qǐng)判斷 x 是否是回文數(shù)夯接,如果 x 是一個(gè)回文整數(shù)焕济,返回 True ;否則盔几,返回 False 晴弃。
說(shuō)明:回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。
注意:這里不允許直接使用將整數(shù)轉(zhuǎn)換為字符串的方法。
例如:
給定一個(gè)整數(shù):121上鞠,返回結(jié)果:True
給定一個(gè)整數(shù):-121际邻,返回結(jié)果:False
給定一個(gè)整數(shù):123,返回結(jié)果:False
實(shí)現(xiàn)思路1
- 通過(guò)
取模運(yùn)算
芍阎,每次把整數(shù)除以10世曾,得到余數(shù) - 如果 整數(shù)x 小于0,或者被10整除谴咸,那么說(shuō)明該整數(shù) x 必然不是回文數(shù)
- 設(shè)置數(shù)字反轉(zhuǎn)后的值為 reverse_x 轮听,默認(rèn)為 0 ;設(shè)置 tmp=x 岭佳,用于取模運(yùn)算
- 通過(guò) while 循環(huán)血巍,每次循環(huán)對(duì) tmp 進(jìn)行取模運(yùn)算,結(jié)合余數(shù)求出每次循環(huán)后的倒序結(jié)果 reverse_x珊随,最終判斷 reverse_x 與 x 是否相等
- 上面做法是把所有數(shù)字都反轉(zhuǎn)藻茂,需要循環(huán) n 次
例如給定整數(shù) 12321 ,按上面思路玫恳,得到初始值:reverse_x = 0,tmp = 12321优俘,然后計(jì)算如下:
第 1 次循環(huán): 求出個(gè)位上的數(shù) 12321 % 10 = 1
reverse_x = reverse_x * 10 + 1 = 1
tmp = tmp // 10 = 1232第 2 次循環(huán): 求出十位上的數(shù) 1232 % 10 = 2
reverse_x = reverse_x * 10 + 2 = 12
tmp = tmp // 10 = 123第 3 次循環(huán): 求出百位上的數(shù) 123 % 10 = 3
reverse_x = reverse_x * 10 + 3 = 123
tmp = tmp // 10 = 12第 4 次循環(huán): 求出千位上的數(shù) 12 % 10 = 2
reverse_x = reverse_x * 10 + 2 = 1232
tmp = tmp // 10 = 1第 5 次循環(huán): 求出萬(wàn)位上的數(shù) 1 % 10 = 1
reverse_x = reverse_x * 10 + 1 = 12321
tmp = tmp // 10 = 0
代碼實(shí)現(xiàn)
def isPalindrome(x):
if x < 0 or (x != 0 and x % 10 == 0):
return False
reverse_x, tmp = 0, x
while tmp > 0:
reverse_x = reverse_x * 10 + tmp % 10
tmp = tmp // 10
return reverse_x == x
實(shí)現(xiàn)思路2
- 通過(guò)
取模運(yùn)算
京办,該實(shí)現(xiàn)是對(duì)上面的方法進(jìn)行優(yōu)化 - 如果 整數(shù)x 小于0,或者被10整除帆焕,那么說(shuō)明該整數(shù) x 必然不是回文數(shù)
- 設(shè)置數(shù)字反轉(zhuǎn)后的值為 reverse_x 惭婿,默認(rèn)為 0
- 通過(guò) while 循環(huán),每次循環(huán)對(duì) x 進(jìn)行取模運(yùn)算, 結(jié)合余數(shù)求出每次循環(huán)后的倒序結(jié)果 reverse_x叶雹,當(dāng) x < reverse_x 時(shí)财饥,結(jié)束循環(huán)
- 最終判斷 reverse_x 與 x 是否相等,或者 reverse_x 整除10 后的值與 x 是否相等
- 上面做法是僅把一半數(shù)字都反轉(zhuǎn)折晦,需要循環(huán) n / 2 次
例如 x=12321钥星,那么循環(huán)結(jié)束后的最終結(jié)果為:reverse_x = 123,x = 12满着,此時(shí)判斷 reverse_x 整除10 后的值與 x 是否相等谦炒;
例如 x=123321,那么循環(huán)結(jié)束后的最終結(jié)果為:reverse_x = 123风喇,x = 123宁改,此時(shí)判斷 reverse_x 與 x 是否相等 。
代碼實(shí)現(xiàn)
def isPalindrome(x):
if x < 0 or (x != 0 and x % 10 == 0):
return False
reverse_x = 0
while x > reverse_x:
reverse_x = reverse_x * 10 + x % 10
x = x // 10
return x == reverse_x or x == reverse_x // 10
更多Python編程題魂莫,等你來(lái)挑戰(zhàn):Python編程題匯總(持續(xù)更新中……)