首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LeetCode 125:回文数字简易Leetcode

LeetCode 125:回文数字简易Leetcode
EN

Stack Overflow用户
提问于 2020-06-05 11:07:08
回答 3查看 536关注 0票数 1

这就是我的答案。然而,我无法通过"11“的测试用例。我找不到代码中的错误之处。请帮帮我!谢谢!

代码语言:javascript
复制
/**
 * @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;
    }
};

EN

回答 3

Stack Overflow用户

发布于 2020-06-05 11:23:19

查找回文本质上是通常使用字符串而不是数字变量来执行的操作,因此我建议将数字转换为字符串,然后从字符串开始:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2020-06-05 12:44:06

使用字符串检查回文是非常简单和直接的。话虽如此,如果您想知道如何在不将数字更改为字符串的情况下做到这一点,

  • 首先使用100

初始化变量

  • ,直到start的值大于0,然后在循环中比较第一位和最后一位,如果它们不相等,则在每次迭代中返回false

  • ,从x中删除第一位和最后一位,并按100

减少start

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2020-06-10 13:15:44

JavaScript

代码语言:javascript
复制
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;
};

Python

代码语言:javascript
复制
class Solution:
    def isPalindrome(self, x):
        if x < 0 or (x > 0 and not x % 10):
            return False

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

Java

代码语言:javascript
复制
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);
    }
}

如果你可能感兴趣,还有另一个类似的isPalindrome question,我刚刚复制到下面:

JavaScript i

代码语言:javascript
复制
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

代码语言:javascript
复制
var isPalindrome = function(s) {
    var original = s.replace(/[^a-z0-9]/isg, '');
    var reversed = original.split('').reverse().join('');

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

Java

代码语言:javascript
复制
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);
    }
}

Python

代码语言:javascript
复制
class Solution:
    def isPalindrome(self, s):
        s = ''.join(re.findall(r'(?is)[a-z0-9]+', s)).lower()
        return s == s[::-1]

[^a-zA-Z0-9_]).相同,

  • \W (非单词字符)通过\w匹配任何不匹配的单个字符

参考文献

您可以在以下链接中找到其他解释:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62207467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档