【问题标题】:LeetCode 762 why is separate code works in Jupiter Notebook and not in LeetcodeLeetCode 762 为什么单独的代码适用于 Jupyter Notebook 而不是 Leetcode
【发布时间】:2019-06-25 04:27:06
【问题描述】:

我正在研究 leetcode “762. 二进制表示中设置位的质数”,我测试了我的代码在 Jupiter Notebook 上运行良好,当我迁移到 leetcode 时,它​​显示 null 作为结束结果。有人可以给我任何关于问题所在的提示吗?

class Solution:
    def countPrimeSetBits(self, L, R):
        """
        :type L: int
        :type R: int
        :rtype: int
        """
        def isPrime(num):
            if num == 0:
                return False
            list1 = list(range(num))
            list1.remove(0)
            if len(list1) != 0:
                list1.remove(num-1)
            for i in list1:
                if num % (i+1) == 0:
                    return False
                else:
                    return True

            count = 0
            for i in range(L, R+1):
                newlist = list(bin(i)[2::])
                newcount = 0
                for j in newlist:
                    if j == '1':
                        newcount += 1
                if isPrime(newcount) is True:
                    count += 1
            return count

第一个测试用例 L=842 和 R=888 的预期结果是 23 Jupiter Note book 按预期返回了 23,但 Leetcode 结果返回 null

【问题讨论】:

    标签: python python-3.x binary primes


    【解决方案1】:

    你有两个严重的问题。首先是显示的代码缩进不正确,因此countPrimeSetBits() 的代码主体是内部函数isPrime() 的一部分。第二个问题是,除了是有史以来最糟糕的实现之外,您的 isPrime() 并没有真正起作用:

    >>> isPrime(169)
    True
    >>> 13 * 13
    169
    >>> 
    

    由于这个else 子句将return 放置在代码中的错误位置:

    else:
        return True
    

    以下是您的修补代码,希望在这两种环境中都能正常工作:

    class Solution:
    
        def countPrimeSetBits(self, L, R):
            """
            :type L: int
            :type R: int
            :rtype: int
            """
    
            def isPrime(number):
                if number == 0:
                    return False
    
                divisors = list(range(number))
                divisors.remove(0)
                if divisors:
                    divisors.remove(number - 1)
    
                for divisor in divisors:
                    if number % (divisor + 1) == 0:
                        return False
    
                return True
    
            count = 0
    
            for i in range(L, R + 1):
                newlist = list(bin(i)[2::])
                newcount = 0
    
                for j in newlist:
                    if j == '1':
                        newcount += 1
    
                if isPrime(newcount):
                    count += 1
    
            return count
    

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 2019-07-16
    • 2018-06-20
    • 2022-07-30
    • 2020-04-27
    • 2022-01-23
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多