Problem Statement
Given an integer x, return true if x is a palindrome, and false otherwise.
Approach
- While number is greater than reversed, remove the last digit of the number and append it to the reversed number.
- If number has even number of digits and it is a palindrome, the number and reversed number will be equal.
- If number has odd number of digits and it is a palindrome, the number will be equal to (reversed number / 10).
Solution in Swift
class Solution {
func isPalindrome(_ x: Int) -> Bool {
if x < 0 || (x != 0 && x % 10 == 0) {
return false
}
var number = x
var reversed = 0
while number > reversed {
reversed = 10 * reversed + (number % 10)
number /= 10
}
return number == reversed || number == reversed / 10
}
}
Complexity
Time Complexity: \(O(\log n)\).
\(\log_{10} n\) = number of digits in \(n\).
Space Complexity: \(O(1)\)