LeetCode 125: 词缀号简易利特码

问题描述 投票:0回答:1

这是我的答案。但是,我无法通过 "11 "的测试用例,我找不到代码中的错误。请大家帮忙 谢谢你!这是我的答案。

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    if (x === 0) {
        return true;
    }
    
    if (x < 0 || x % 10 === 0) {
        return false;
    }

    let rev = 0;
    
    while (x > rev) {

        pop = x % 10;
        x = x / 10;
        rev = (rev * 10) + pop;
    }
    
    if (x === rev || x === rev / 10) {
        return true;
    }
    else {
        return false;
    }
};
javascript palindrome leetcode
1个回答
1
投票

找寻表音符是你通常会在使用 字符串而不是数字变量,所以我建议将你的数字转换为字符串,然后从那里开始。

var isPalindrome = function(x) {
    x = x + "";   // convert to string, if x be a number
    var isPalindrome = true;
    for (i = 0; i < x.length/2; i++) {
        if (x.substring(i, i+1) != x.substring(x.length-1-i, x.length-i)) {
            isPalindrome = false;
            break;
        }
    }

    return isPalindrome;
}

console.log(isPalindrome(1234321));
console.log(isPalindrome(1234329));

这里的策略是迭代一半的字符串, 并断言每个字符都与另一半的对应字符相匹配。 需要注意的是,在输入字符数为奇数的情况下,我们不需要检查中间的字符。


0
投票

使用string来检查词缀是非常简单和直接的。说了这么多,如果你想看看如何在不把数字改成字符串的情况下做到这一点。

  • 首先初始化一个变量,以 Math.pow(10, digit count-1)
  • 循环直到start的值大于0为止。
    • 在循环中比较第一个和最后一个数字,如果它们不相等,则返回false。
    • 每次迭代时,从x中去掉第一个和最后一个数字,并将起始值减少100。

var isPalindrome = function(x) {
    // as per question on leetcode negative values cannot be palindrome
    if( x < 0) {
      return false
    }
    x = Math.abs(x)
   // to get the digits from start we need to get log10 of given value
    let len = Math.ceil( Math.max( Math.log10(x), 1 ) ) - 1
    let start = Math.pow(10, len)
    while(start){
    // compare first digit with the last digit
    if(Math.floor(x/start) != (x % 10)){
      return false
    }
    // remove first digit of current x
    x = x % start
    // remove last digit of current x
    x = Math.floor(x/10)
    // reduce start by 100 as we removed 2 digits
    start = Math.floor(start / 100)
   }
   return true
};

console.log(isPalindrome(1))
console.log(isPalindrome(1221))

console.log(isPalindrome(-121))
console.log(isPalindrome(12341))
console.log(isPalindrome(100111))

注:- 我们 (digit count - 1) 这样我们就可以捕捉到第一个数字

Original leetcode question link


0
投票

你的问题似乎是 LeetCode 9 而在讨论区,也有很好的被接受的解决方案,比如。

比如说:

var isPalindrome = function(x) {
    if (x < 0) 
        return false;

    let reversed = 0;
    for (let i = x; i > 0; i = Math.floor(i / 10)) 
        reversed = reversed * 10 + i % 10;

    return reversed === x;
};

蟒蛇

class Solution:
    def isPalindrome(self, x):
        if x < 0 or (x > 0 and not x % 10):
            return False

        return str(x) == str(x)[::-1]

爪哇

class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0 || (x != 0 && x % 10 == 0))
            return false;

        int reversed = 0;

        while (x > reversed) {
            reversed = reversed * 10 + x % 10;
            x /= 10;
        }

        return (x == reversed || x == reversed / 10);
    }
}

还有一个类似的 是词缀问题 如果你可能有兴趣,我刚刚复制了以下。

JavaScript I

var isPalindrome = function(s) {
    var original = s.replace(/\W/g, ''); // means NON-WORD characters  
    var reversed = original.split('').reverse().join('');

    return original.toLowerCase() == reversed.toLowerCase();
};

JavaScript II

var isPalindrome = function(s) {
    var original = s.replace(/[^a-z0-9]/isg, '');
    var reversed = original.split('').reverse().join('');

    return original.toLowerCase() == reversed.toLowerCase();
};

爪哇

class Solution {
    public boolean isPalindrome(String s) {
        String original = s.replaceAll("(?i)[^a-z0-9]", "").toLowerCase();
        String reversed = new StringBuffer(original).reverse().toString();
        return original.equals(reversed);
    }
}

蟒蛇

class Solution:
    def isPalindrome(self, s):
        s = ''.join(re.findall(r'(?is)[a-z0-9]+', s)).lower()
        return s == s[::-1]
  • \W (非文字字符)匹配任何一个不匹配的单字。\w (同 [^a-zA-Z0-9_]).

参考文献

你可以在下面的链接中找到额外的解释。

© www.soinside.com 2019 - 2024. All rights reserved.