leetcode每日一题 9. 回文数(JavaScript)
难度简单
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:
输入:x = -101
输出:false
提示:
- -231 <= x <= 231 – 1
进阶:你能不将整数转为字符串来解决这个问题吗?
直接可以想到的解法
- 数字转换字符串分割成数组 反转数组相等
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
let str=x.toString()
let arr=str.split('');
if(x<0) return false;
else if(arr.reverse().join('')===str){
return true
}else{
return false
}
};
进阶方法(个人产出)
- 思路类似于出栈的思想,主要通过数字的取余,整除等完成
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
//特殊情况 负数 个位数 100以内的数 以及 10 100 1000 等(个人逻辑在大循环中没考虑到所以需要特殊处理)
if(x<0) return false;
if(x<10) return true;
if(x<100){
if(x%10==Math.floor(x/10)){return true}
else{return false}
}
if(Number.isInteger(Math.LOG10E*Math.log(x))){return false}
let num1=x;
//如果x个位数为0的话 此处num2需要预设初始值1,否则例如200000情况 达不到后面位数的把控
let num2=x%10===0?1:0;
while(num1>num2){
//tran标志每一次的个位数
let tran=num1%10;
//num1表示x每次除10后的数
num1=Math.floor(num1/10);
//num2相当于后期倒过来的数
num2=num2*10+tran;
//进行比较,如果是12321这种形式的数,则num1 123/10=12 与num2的12 相等即可
if(num1==num2||Math.floor(num1/10)==num2) return true;
}
return false
};
作者:zoexyf
链接:https://leetcode-cn.com/problems/palindrome-number/solution/cai-yong-bu-jiang-zheng-shu-zhuan-wei-zi-wqu7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
版权声明:本文为m0_43391490原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。