由题可知, 小于0的整数, 基本可以返回false
, 然后对整数从小往大将各位数的数字传入数组, 通过循环数组长度大与1, 同时对数组进行pop
和shift
来获取头尾的值进行判断.
/**
* @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
};