Разбор задачи: Переупорядоченная степень 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.
  • Для каждой степени двойки:
    1. Преобразуем ее в строку с помощью str.
    2. Сортируем ее цифры, чтобы сравнить с отсортированным списком цифр числа nn.
    • Например, если n=46n = 46, его отсортированный список цифр ['4', '6'] будет сравниваться с:
      • 26=642^6 = 64, отсортированный как ['4', '6'].
  • Если найдено совпадение, функция возвращает True, так как перестановкой цифр числа nn можно получить степень двойки.

4. Если совпадений не найдено

return False
  • Если после проверки всех степеней двойки ни одна из них не совпала с перестановками цифр числа nn, возвращается False.

Примеры работы функции

Пример 1:

n = 1
result = reorderedPowerOf2(1)
  • Сортировка цифр числа n=1n = 1: ['1'].
  • Проверяем степени двойки:
    • 20=12^0 = 1, отсортированный список цифр: ['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'] (не совпадает).
    • И так далее.
  • Ни одно совпадение не найдено, функция возвращает False.

Пример 3:

n = 46
result = reorderedPowerOf2(46)
  • Сортировка цифр числа n=46n = 46: ['4', '6'].
  • Проверяем степени двойки:
    • 26=642^6 = 64, отсортированный список цифр: ['4', '6'].
  • Совпадение найдено, функция возвращает True.

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии