leetcode9. 回文数(JavaScript)

  • Post author:
  • Post category:java




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 版权协议,转载请附上原文出处链接和本声明。