我正在使用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结果返回了空值
答案 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