leetcode之回文数
- 该题目就是讲数字的顺序进行反转之后是否相等,比较重要的步骤为弹出和推入,操作如下
- 注意事项
- 负数可以直接为false,因为带符号反转后一定不相等
- 取模
- 取余
- 弹出和推入数字
- [弹出]为: num = origin % 10;num /= 10;
- [推入]为:result = result * 10 + num;
- 模式识别
- INT_MAX和INT_MIN,js的话对应的就是Math.pow(2,31)-1和Math.pow(-2,31)
- 此举是防止数字溢出
- 案例推演
- 假设有一个数字1234,反转后应为4321
- 首先我们可以对取最后一位4,res = res * 10 + x % 10 = 4,然后取整去除数字4 => 123
- 取第二位3,,res = res * 10 + x % 10 = 43,然后取整去除数字3 => 12
- 取第三位2,,res = res * 10 + x % 10 = 432,然后取整去除数字2 => 1
- 最后,res = res * 10 + x % 10 = 4321,然后取整去除数字1,此时x = 0,循环结束,得到结果4321
- 最后判断是否相等,如果想等就是回文数,这题其实如果掌握了上一节的数字反转就简单很多
- 算法
var isPalindrome = function(x) {
if (typeof x !== 'number' || x < 0) {
return false
}
let res = 0
let digit = x
while(digit) {
res = res * 10 + digit%10
if (res > Math.pow(2, 31) - 1 || res < Math.pow(-2, 31)) {
return false
}
digit = ~~(digit/10)
}
console.log(res, x)
return x === res
};