回文数

双指针法

var isPalindrome = function (x) {
  if (x < 0) return false;

  let s = x.toString();
  let len = s.length;
  let i = 0;
  let j = len - 1;
  while (i < j) {
    if (s[i] !== s[j]) {
      return false;
    }
    i++;
    j--;
  }
  return true;
};
console.log(isPalindrome(121)); // true
console.log(isPalindrome(-121)); // false
console.log(isPalindrome(10)); // false
console.log(isPalindrome(12321)); // true
console.log(isPalindrome(0)); // true

数学方法

var isPalindrome = function (x) {
  if(x < 0 || (x % 10 === 0 && x !== 0)) return false;
  let reversed = 0;

  // 当x <= reversed时,说明已经处理完一半的数字
  // 例如:12321,处理到12时,reversed为21
  while (x > reversed) {
    reversed = reversed * 10 + x % 10;
    x = Math.floor(x / 10);
  }
  return x === reversed || x === Math.floor(reversed / 10);
};
console.log(isPalindrome(121)); // true
console.log(isPalindrome(-121)); // false
console.log(isPalindrome(10)); // false
console.log(isPalindrome(12321)); // true
console.log(isPalindrome(0)); // true