397. Integer Replacement
Đề Bài
Given a positive integer n, you can apply one of the following operations:
- If
nis even, replacenwithn / 2. - If
nis odd, replacenwith eithern + 1orn - 1.
Return the minimum number of operations needed for n to become 1.
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 <= 231 - 1
Lời Giải
C++
0397-integer-replacement.cpp
class Solution {
public:
int dp(int n) {
if (n == INT_MAX) {
return 32;
}
if (n == 1) {
return 0;
}
if (n % 2 == 0) {
return 1 + dp(n / 2);
}
return 1 + min(dp(n - 1), dp(n + 1));
}
int integerReplacement(int n) {
return dp(n);
}
};