Skip to content

Latest commit

 

History

History
55 lines (49 loc) · 1.25 KB

9.palindrome-number.md

File metadata and controls

55 lines (49 loc) · 1.25 KB

回文数

题目

思路

由题可知, 小于0的整数, 基本可以返回false, 然后对整数从小往大将各位数的数字传入数组, 通过循环数组长度大与1, 同时对数组进行popshift来获取头尾的值进行判断.

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
  if (x < 0) return false
  if (x < 10) return true
  if (x % 10 === 0) return false
  let result = true
  let tmp = []
  let source = x
  while (source >= 1) {
    tmp.push(source % 10)
    source = (source / 10) >>> 0
  }
  while (tmp.length > 1) {
    const pop = tmp.pop()
    const shift = tmp.shift()
    result = pop === shift
    if (!result) return result
  }
  return result
};

纯数字操作会有两次循环, 而如果改为字符串, 则直接进行头尾判断, 只需一次循环.

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