Минимальное количество шагов, чтобы изменить N на 1, изменив его на 2*N или N/10 на любом шаге

Опубликовано: 22 Сентября, 2022

Для заданного целого числа N найдите минимальное количество операций, чтобы изменить N на 1. Если это невозможно, выведите -1. Одна операция определяется либо как преобразование N в число 2*N , либо как преобразование N в число N/10 (только если N делится на 10).

Примеры:

Input: N = 50
Output: 3
Explanation: N can be converted to 1 in 3 steps as follows:
-> Firstly, multiply N by 2 and change N from 50 to 100 (2*N)
-> Then, divide N by 10 and change N from 100 to 10 (N/10)
-> And then, divide N by 10 and change N from 10 to 1 (N/10)

Input: N = 120
Output: -1
Explanation: There is no possible way for Geek to get to position 1.

Подход: N можно преобразовать в 1 , только если N можно свести к 1 либо умножением на 2 , либо делением на 10 на каждом шаге. Теперь N нельзя уменьшить до 1 , следуя этим шагам, если N имеет простой делитель, отличный от 2 и 5 . Более того, если количество двоек больше, чем 5 в простой факторизации N , N не может уменьшить его до 1 , потому что невозможно будет нейтрализовать все двойки . Равное количество двоек и пятерок можно нейтрализовать, разделив число на 10 . Лишние 5 можно нейтрализовать, умножив на лишние 2 , а затем разделив на 10 . Выполните следующие шаги, чтобы решить проблему:

  • Инициализируйте переменные двойки и пятерки как 0 , чтобы подсчитать число 2 и число 5 в простой факторизации числа N.
  • Повторяйте цикл while, пока N%2 не станет равным 0 , и выполните следующие шаги:
    • Разделите число N на 2.
    • Увеличьте значение двоек на 1.
  • Повторяйте цикл while, пока N%5 не станет равным 0 , и выполните следующие шаги:
    • Разделите число N на 5.
    • Увеличьте значение пятерок на 1.
  • Если N равно 1 , а количество двоек меньше, чем равно количеству пятерок, то в качестве ответа выведите 2*пятерки-двойки .
  • В противном случае выведите -1.

Ниже приведена реализация описанного выше подхода.

Временная сложность: O (log N)
Вспомогательное пространство: O(1)