Достигните N от 1, увеличив значение на 1 или удвоив значение не более чем D раз.
Опубликовано: 20 Сентября, 2022
Учитывая целое число N и целое число D , задача состоит в том, чтобы достичь N из 1 за минимальное количество ходов, либо добавив 1, либо удвоив значение, но удвоение может быть выполнено не более D раз.
Примеры:
Input: N = 20, D = 4
Output: 5
Explanation: The flow can be seen as 1 -> 2 -> 4 -> 5 -> 10 -> 20Input: N = 10, D = 0
Output: 9
Подход: Задачу можно решить с помощью рекурсии:
- Объявите переменную для хранения минимальных ходов в качестве ответа
- Сначала проверьте, достигнута ли цель , если да, найдите минимум текущих ходов и ответьте в ответе .
- Затем проверьте, исчерпаны ли ходы удвоения D , но цель еще не достигнута,
- Затем добавьте оставшиеся ходы как увеличивающиеся ходы, добавив ( N-current_value ) в current_moves.
- Найдите минимум current_moves и ans и сохраните в ans
- Если current_value пересекло N , верните
- Если ни один из вышеперечисленных случаев не соответствует, рекурсивно вызовите функцию, чтобы сделать оба нижеприведенных шага один за другим:
- удвоить текущее_значение
- добавить 1 к текущему_значению.
- Вернуть окончательный ответ .
Ниже приведена реализация описанного выше подхода.
Временная сложность: O(N)
Вспомогательное пространство: O(1)