題目描述:
判斷一個整數(shù)是否是回文數(shù)辅愿∫淠常回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。
示例 1:
輸入: 121
輸出: true示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 癞埠。 從右向左讀, 為 121- 聋呢。因此它不是一個回文數(shù)苗踪。示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 削锰。因此它不是一個回文數(shù)。
進階:
你能不將整數(shù)轉(zhuǎn)為字符串來解決這個問題嗎测暗?
笨方法:
第一反應(yīng)就是轉(zhuǎn)換為字符串磨澡,然后正反相等就返回True,否則返回False稳摄。這題的確簡單,關(guān)鍵是要明確回文字符串的判斷方式厦酬。
沒想到成績也不錯,打敗了99%的用戶昌讲。
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
#轉(zhuǎn)換為字符串
s=str(x)
#正反相等
if s==s[::-1]:
return True
else:
return False
聰明方法:
題目提出來“能不將整數(shù)轉(zhuǎn)為字符串來解決這個問題嗎减噪?”车吹,當然可以醋闭。這里又以下幾點需要考慮:
- 整數(shù)的反轉(zhuǎn):還是用逐位左移的方式。
- 正負數(shù)的問題证逻,負數(shù)不可能是回文數(shù)。
- 反轉(zhuǎn)后超過整數(shù)范圍的情況囚企,不可能是回文數(shù)。
最終耗時188ms扯罐,超過29.9%的用戶烦衣,用時長了不少。
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
ans=0
if x<0:
return False
# 注意:保留x的原始值
tmp=x
# 整數(shù)反轉(zhuǎn)
while tmp>0:
ans=ans*10+tmp%10
tmp=tmp//10
if x==ans:
return True
else:
return False