Дано: целое число n, верните true, если оно является степенью двойки. В противном случае возвращается false.
Пример 1:
Дано: n = 1
Выход: true
Пример 2:
Дано: n = 16
Выход: true
Пример 3:
Дано: n = 3
Выход: false
Ограничения:
-2^31 <= n <= 2^31 - 1 Решения: 1) Наивный подход class Solution:
def isPowerOfTwo(self, n: int) -> bool:
if n <= 0:
return False
if n == 1:
return True
while (n % 2 == 0):
n /= 2
return n == 1 Отсекаем ненатуральные числа, и циклом делим числом на 2, проверяем, что в конце получаем целочисленное значение. Временная сложность: O(logn)
Пространственная сложность: O(1) 2) Использование свойства логарифма: class Solution:
def isPowerOfTwo(self, n: int) -> bool:
return n>0 and log2(n) == int(log2(n)) Используем библиотеку math для вычисления логарифма, если он целочисленный возвращаем true Временная сложность: O(logn) Пространственная сложность: O(1) 3) использование двоичной фор