Problem Statement

Given an integer x, return true if x is a palindrome, and false otherwise.

Palindrome Number - LeetCode

Approach

  1. While number is greater than reversed, remove the last digit of the number and append it to the reversed number.
  2. If number has even number of digits and it is a palindrome, the number and reversed number will be equal.
  3. 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)\)