package
0.0.0-20241221191246-b80a13d7bbe0
Repository: https://github.com/yvv4git/go-algorithms.git
Documentation: pkg.go.dev
# README
397. Integer Replacement
Level - medium
Task
Given a positive integer n, you can apply one of the following operations:
- If n is even, replace n with n / 2.
- If n is odd, replace n with either n + 1 or n - 1.
Return the minimum number of operations needed for n to become 1.
Объяснение
Задача относится к категории динамического программирования и рекурсии. В этой задаче требуется найти минимальное количество операций, необходимых для преобразования заданного целого числа n в 1. Допустимые операции следующие:
- Если n четное, то n можно заменить на n / 2.
- Если n нечетное, то n можно заменить на n + 1 или n - 1.
Пример Рассмотрим пример для n = 8:
- 8 (четное) -> 8 / 2 = 4
- 4 (четное) -> 4 / 2 = 2
- 2 (четное) -> 2 / 2 = 1
Таким образом, для n = 8 требуется 3 операции.
Для решения этой задачи можно использовать рекурсию с мемоизацией (кешированием результатов) или итеративный подход с использованием очереди (BFS).
Example 1:
Input: n = 8
Output: 3
Explanation: 8 -> 4 -> 2 -> 1
Example 2:
Input: n = 7
Output: 4
Explanation: 7 -> 8 -> 4 -> 2 -> 1
or 7 -> 6 -> 3 -> 2 -> 1
Example 3:
Input: n = 4
Output: 2
Constraints:
- 1 <= n <= 2^31 - 1