题目描述
Given an integer x, return true if x is palindrome integer.
An integer is a palindrome when it reads the same backward as forward.
For example, 121 is a palindrome while 123 is not.
Example 1:
Input: x = 121
Output: true
Explanation: 121 reads as 121 from left to right and from right to left.
Example 2:
Input: x = -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Example 3:
Input: x = 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Constraints:
-231 <= x <= 231 - 1
Follow up: Could you solve it without converting the integer to a string?
自己的解法
I solved this problem with str and numerical operation.
class Solution:
def isPalindrome(self, x: int) -> bool:
# 1. str解法
x_str = str(x)
return x_str[::-1] == x_str
class Solution:
def isPalindrome(self, x: int) -> bool:
# 2. 数值解法
running_x = x
reverse_x = 0
while running_x > 0:
reverse_x = 10 * reverse_x + running_x % 10
running_x = running_x//10
return reverse_x == x
The time complexity is O ( l o g 10 ( n ) ) O(log_{10}(n)) O(log10(n)) and the space complexity is O ( 1 ) O(1) O(1).
参考答案
Early Stop
The answer updated my code by comparing only half of the numbers.
But still, they have the same complexity.
class Solution:
def isPalindrome(self, x: int) -> bool:
# 3.参考答案改进
if x < 0 or (x % 10 ==0 and x != 0) :
return False
reverse_x = 0
while reverse_x < x:
reverse_x = reverse_x * 10 + x % 10
x = x//10
return reverse_x == x or reverse_x//10 == x
Time complexity:
O
(
l
o
g
10
(
n
)
)
O(log_{10}(n))
O(log10(n))
Space complexity:
O
(
1
)
O(1)
O(1)
总结
- 锻炼了数值运算的一些小trick
- Early Stop优化代码,思路++