LeetCode 762 почему отдельный код работает в блокноте Jupiter, а не в Leetcode - PullRequest
0 голосов
/ 31 января 2019

Я работаю над leetcode «762. Простое число битов в двоичном представлении», и я проверил, что мой код отлично работает на ноутбуке Jupiter, и когда я перехожу на 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 голосов
/ 01 февраля 2019

У вас две серьезные проблемы.Во-первых, код в том виде, в котором он представлен, имеет неправильный отступ, так что тело кода для 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
...