9. Palindrome Number

Problem:

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.

Follow up:

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

Solution:

ONE

Easy to write but slow since it generates an array.

/**
 * @param {number} x
 * @return {boolean}
 */
let isPalindrome = function (x) {
    return x == String(x).split('').reverse().join('');
};

TWO

A bit faster.

/**
 * @param {number} x
 * @return {boolean}
 */
let isPalindrome = function (x) {
    const s = String(x);
    for (let i = 0, j = s.length - 1; i < j; i++, j--) {
        if (s[i] !== s[j]) {
            return false;
        }
    }
    return true;
};

THREE

General solution. Combining 7. Reverse Integer.

/**
 * @param {number} x
 * @return {boolean}
 */
let isPalindrome = function (x) {
    if (x < 0) {
        return false;
    }
    return x === reverse(x);
};

/**
 * @param {number} x
 * @return {number}
 */
function reverse(x) {
    let result = 0;
    while (x) {
        result = result * 10 + (x % 10);
        x = (x / 10) | 0;
    }
    return result;
}

: .。. o(≧▽≦)o .。.:☆☆: .。. o(≧▽≦)o .。.:☆☆: .。. o(≧▽≦)o .。.:



: .。. o(≧▽≦)o .。.:☆☆: .。. o(≧▽≦)o .。.: