【LeetCode題解】9_迴文數(Palindrome-Number)
阿新 • • 發佈:2018-11-23
9_迴文數(Palindrome-Number)
文章目錄
描述
判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個迴文數。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個迴文數。
進階:
你能不將整數轉為字串來解決這個問題嗎?
解法一:轉化為字串的比較
思路
將整數轉化為字串,比較逆序的字串與原字串是否相等即可。
Java 實現
class Solution {
public boolean isPalindrome(int x) {
String reversedStr = (new StringBuilder(x + "")).reverse().toString();
return (x + "").equals(reversedStr);
}
}
Python 實現
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
return str(x) == str(x)[::-1]
複雜度分析
- 時間複雜度: ,其中, 表示該整數,整數的位數大約為
- 空間複雜度:
解法二:反轉數字的後半部分 ★
思路
對於這道題,我們可能會想到將整數直接反轉後進行比較,但是反轉的整數有可能大於最大的整數,從而造成整數溢位。因此,我們採用另一種做法——只反轉整數的後半部分,然後判斷整數的後半部分和前半部分是否相等,如果相等,則該整數就是一個迴文數。當然,進行反轉前需要進行一些邊界判定,例如整數是否為負數(負數不可能是迴文數)等。
Java 實現
class Solution {
public boolean isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int rev = 0;
while (x > rev) {
rev = rev * 10 + x % 10;
x /= 10;
}
return x == rev || x == rev / 10;
}
}
Python 實現
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if (x < 0) or (x % 10 == 0 and x != 0):
return False
rev = 0
while x > rev:
rev = rev * 10 + x % 10
x = x // 10
if rev == x or rev // 10 == x:
return True
else:
return False
複雜度分析
- 時間複雜度: ,其中 表示輸入的整數
- 空間複雜度: