LeetCode 762为什么单独的代码在Jupiter Notebook中有效而不在Leetcode中有效

时间:2019-01-31 16:34:55

标签: python python-3.x binary primes

我正在使用leetcode“ 762.二进制表示形式中的设置位数的素数”,并且我测试了我的代码在Jupiter Notebook上的运行效果很好,当我移植到leetcode中时,它显示空值作为结束结果。可能有人给我任何暗示上有什么问题?

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

第一个测试用例的预期结果为23,即L = 842和R = 888 木星笔记本给了我23的期望值,但是Leetcode结果返回了空值

1 个答案:

答案 0 :(得分:0)

您有两个严重的问题。首先是所提供的代码没有正确缩进,因此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