給你乙個整數 x ,如果 x 是乙個回文整數,返回 true ;否則,返回 false 。
回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。例如,121 是回文,而 123 不是。
示例 1:
輸入:x =
121輸出:true
示例 2:
輸入:x =
-121
輸出:false
解釋:從左向右讀, 為 -
121 。 從右向左讀, 為 121
- 。因此它不是乙個回文數。
示例 3:
輸入:x =
10輸出:false
解釋:從右向左讀, 為 01 。因此它不是乙個回文數。
示例 4:
輸入:x =
-101
輸出:false
-
231<= x <=
231-
1
高階:你能不將整數轉為字串來解決這個問題嗎?
前幾天面試還碰到這道題了,但是面試題目要難許多。先放個解法。
再換個解法
class
solution
(object):
defispalindrome
(self, x)
:"""
:type x: int
:rtype: bool
"""s=
str(x)
i=0 stop=
int(
len(s)/2
)+1while i
if s[i]
==s[
-i-1]:
i=i+
1else
:return
false
if i ==stop:
return
true
else
:return
false
效能有了些微改善。
上面兩種解法都沒有逃脫把x先轉換成string再判斷的思路。
首先,負數和尾數為0的數字均不是回文數。
其次,對於剩下的數字,將數字通過相除取餘進行翻轉,當原始數字的部分小於或等於翻轉後的數字,就說說明已經翻轉了一半(奇偶要分開考慮)。官方題解沒有給出python**,自己寫了一下。
class
solution
(object):
defispalindrome
(self, x)
:"""
:type x: int
:rtype: bool
"""if(x<0)
|((x%10==0
)&(x!=0)
):return
false
else
: o=x
n=0while o>n:
n=n*
10+o%
10 o=o//
10if o==n:
return
true
else:if
(n//10)
==o:
return
true
else
:return
false
避開了string,但效能也沒有提高。
其餘的都大同小異吧。。不列舉了
leetcode題目9 回文數
判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 輸入 121 輸出 true解法一 數字轉字串 class solution def ispalindrome self,x type x int rtype bool if x 0 return fals...
leetcode演算法9 回文數
目錄 給你乙個整數 x 如果 x 是乙個回文整數,返回 true 否則,返回 false 回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。例如,121 是回文,而 123 不是。思路一 先將整數轉為字串 然後將字串分割為陣列,只需要迴圈陣列的一半長度進行判斷對應元素是否相等即可。這種方...
LeetCode 9 回文數(簡單)
點此去做 題幹 判斷乙個整數是否是回文數。回文數是指正序和倒序都是一樣的整數。你能不將數字轉化為字串做嗎?輸入 121 121 10輸出 true false false執行用時 28ms,11.5mb 思想 最開始想要借用整數翻轉的 先將整數翻轉後再做相等比較,結果發現用例中有會造成溢位的大數,不...