LeetCode回文数使用JavaScript解题,一种不太正经的解法|前端学算法

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情

有人相爱,有人夜里开车看海,我是leetcode第一题都做不出来

回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

  • 例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121

输出:true

示例 2:

输入:x = -121

输出:false

解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10

输出:false

解释:从右向左读, 为 01 。因此它不是一个回文数。

解题思路

简单的来说回文就是第一位与最后一位相等,第二位与倒数第二位相同;这里分两种情况,一种是长度是奇数,从最中间往两边对称相等(除了中间那一位),另一种情况是长度位偶数,两边对称相等。所以我们可以将整数转化为字符串,使用两个指针,一个从最开始,一个从最后面开始对比,等到两个指针相遇时,如果都相等了,那这就是一个回文数

步骤可以转化为:

  • 第一步:将整数转化为字符串newX
  • 第二步:遍历字符串,如果newX[i]不等于newX[newX.length-i-1]则就不是回文数,返回false,如果是,则在判断一下i 是否 >= newX.length-i-1如果是则说明已经遍历完了,则返回true
var isPalindrome = function(x) {
    let newX = String(x)
    for(let i=0;i<newX.length;i++){
        if(newX[i] === newX[newX.length-i-1]){
            if(i >=newX.length-i-1){
                return true
            }
        }else{
            return false
        }
    }
};
复制代码

image.png

明明是个大佬爷们,非让我扮女装大佬;明明是 回文,把他转化为 “字符串” 是不是不太正经???

道上的事情,就按照道上的规矩办;数字上的问题,就用数字解决

可以分析出来,当目标数小于0或者只有个位的时候,除了0之外肯定就不是回文数

假设这个数就是回文数,那么它的个位肯定与最高位相同,十位与第二高位相同;用 x % 10可以获取到最高位的数字,进行乘10可以转化为十位或者百位,将它存储为另一个数;而用Math.floor(x/10)就可以截取到回文数的前一部分,进而将这两个数进行比较

var isPalindrome = function(x) {
    if (x < 0 || (x % 10 === 0 && x !== 0)) {
        return false;
    }

    let revertedNumber = 0;
    while (x > revertedNumber) {
        revertedNumber = revertedNumber * 10 + x % 10;
        x = Math.floor(x / 10);
    }
    // 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
    return x === revertedNumber || x === Math.floor(revertedNumber / 10);
};
复制代码

猜你喜欢

转载自juejin.im/post/7132120029159489572