397. Integer Replacement¶
Difficulty: Medium
LeetCode Problem View on GitHub
397. Integer Replacement
Medium
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
Solution¶
class Solution {
private HashMap<Long, Long> memo;
public int integerReplacement(int n) {
memo = new HashMap<>();
long res = solve((long)(n));
return (int)(res);
}
private long solve(long n) {
if (n == 1) return 0;
if (memo.containsKey((long)(n))) return memo.get(n);
if (n % 2 == 0) return 1 + solve(n / 2);
long op1 = 1 + solve(n + 1);
long op2 = 1 + solve(n - 1);
memo.put(n , (long)(Math.min(op1, op2)));
return (long)(Math.min(op1, op2));
}
}
Complexity Analysis¶
- Time Complexity:
O(?) - Space Complexity:
O(?)
Approach¶
Detailed explanation of the approach will be added here