## Description

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

Example 1:

Input: 121
Output: true


Example 2:

Input: -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: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.


Could you solve it without converting the integer to a string?

## Solutions

### 1. Convert to String

# Time: O(n)
# Space: O(n)
class Solution:
def isPalindrome(self, x: int) -> bool:
return self._isPalindrome(str(x))

def _isPalindrome(self, s):
if not s:
return True
n = len(s)
l, r = 0, n - 1
while l < r:
if s[l] != s[r]:
return False
l += 1
r -= 1
return True

# 11509/11509 cases passed (72 ms)
# Your runtime beats 31.57 % of python3 submissions
# Your memory usage beats 100 % of python3 submissions (12.8 MB)


### 2. Divmod

通过除 10 和模 10，将数颠倒过来，然后看是否与原数相等。x 对 10 取余为 0 的肯定不满足。

# Time: O(n)
# Space: O(1)
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0 or (x % 10 == 0 and x != 0):
return False
val = 0
tmp = x
while tmp != 0:
tmp, mod = divmod(tmp, 10)
val = val * 10 + mod
return x == val

# 11509/11509 cases passed (64 ms)
# Your runtime beats 52.03 % of python3 submissions
# Your memory usage beats 100 % of python3 submissions (12.7 MB)