9. Palindrome Number

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

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

 

Example 1:

Input: x = 121
Output: true

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.

Example 4:

Input: x = -101
Output: false

 

Constraints:

  • -231 <= x <= 231 - 1

Rust Solution

struct Solution;

impl Solution {
    fn is_palindrome(x: i32) -> bool {
        if x < 0 {
            return false;
        }
        let mut reversed = 0;
        let mut number = x;
        while number > 0 {
            reversed = reversed * 10 + number % 10;
            number /= 10;
        }
        x == reversed
        // or compare original number as a string with the reversed string
        // let x_str = x.abs().to_string();
        // x >= 0 && x_str == x_str.chars().rev().collect::<String>()
    }
}

#[test]
fn test() {
    assert_eq!(Solution::is_palindrome(-123), false);
    assert_eq!(Solution::is_palindrome(12321), true);
}

Having problems with this solution? Click here to submit an issue on github.