Программа курса:
Разбор задачи: Переупорядоченная степень 2
Предложенный нами код:
def reorderedPowerOf2(n):
# Преобразуем число в строку и сортируем его цифры
digits = sorted(str(n))
# Проверяем, может ли перестановка цифр образовать степень двойки
for i in range(31): # Проверяем степени двойки от 2^0 до 2^30
if digits == sorted(str(1 << i)):
return True
return False
Разбор решения задачи:
1. Определение функции
Функция называется reorderedPowerOf2 и принимает один аргумент:
n: целое число, для которого нужно определить, можно ли перестановкой его цифр получить степень двойки.
2. Преобразование числа в строку и сортировка его цифр
digits = sorted(str(n))
- Сначала преобразуем число
nв строку с помощьюstr(n). Например, еслиn = 46, строка будет"46". - Затем применяем функцию
sorted, чтобы отсортировать символы строки по возрастанию. Это позволяет сравнивать порядок цифр с другими числами.- Для
n = 46результатом будет список['4', '6']. - Если число было бы
64, результат сортировки также был бы['4', '6'].
- Для
Цель этого шага — независимо от исходного порядка цифр привести их к унифицированному виду для сравнения.
3. Перебор степеней двойки
for i in range(31): # Проверяем степени двойки от 2^0 до 2^30
if digits == sorted(str(1 << i)):
return True
- В этом цикле проверяем все степени двойки, начиная с 20=12^0 = 1 и до 230=10737418242^{30} = 1073741824. Эти значения включают все возможные степени двойки, которые могут быть выражены с использованием цифр целого числа nn.
- Выражение
1 << iозначает сдвиг числа1влево наiбит, что эквивалентно вычислению 2i2^i.- Например, для i=3i = 3,
1 << 3даст 23=82^3 = 8.
- Например, для i=3i = 3,
- Для каждой степени двойки:
- Преобразуем ее в строку с помощью
str. - Сортируем ее цифры, чтобы сравнить с отсортированным списком цифр числа nn.
- Например, если n=46n = 46, его отсортированный список цифр
['4', '6']будет сравниваться с:- 26=642^6 = 64, отсортированный как
['4', '6'].
- 26=642^6 = 64, отсортированный как
- Преобразуем ее в строку с помощью
- Если найдено совпадение, функция возвращает
True, так как перестановкой цифр числа nn можно получить степень двойки.
4. Если совпадений не найдено
return False
- Если после проверки всех степеней двойки ни одна из них не совпала с перестановками цифр числа nn, возвращается
False.
Примеры работы функции
Пример 1:
n = 1
result = reorderedPowerOf2(1)
- Сортировка цифр числа n=1n = 1:
['1']. - Проверяем степени двойки:
- 20=12^0 = 1, отсортированный список цифр:
['1'].
- 20=12^0 = 1, отсортированный список цифр:
- Совпадение найдено, функция возвращает
True.
Пример 2:
n = 10
result = reorderedPowerOf2(10)
- Сортировка цифр числа n=10n = 10:
['0', '1']. - Проверяем степени двойки:
- 20=12^0 = 1, отсортированный список цифр:
['1'](не совпадает). - 21=22^1 = 2, отсортированный список цифр:
['2'](не совпадает). - 22=42^2 = 4, отсортированный список цифр:
['4'](не совпадает). - И так далее.
- 20=12^0 = 1, отсортированный список цифр:
- Ни одно совпадение не найдено, функция возвращает
False.
Пример 3:
n = 46
result = reorderedPowerOf2(46)
- Сортировка цифр числа n=46n = 46:
['4', '6']. - Проверяем степени двойки:
- 26=642^6 = 64, отсортированный список цифр:
['4', '6'].
- 26=642^6 = 64, отсортированный список цифр:
- Совпадение найдено, функция возвращает
True.
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии