g0301_0400.s0397_integer_replacement.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java Show documentation
Show all versions of leetcode-in-java Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0301_0400.s0397_integer_replacement;
// #Medium #Dynamic_Programming #Greedy #Bit_Manipulation #Memoization
// #2022_07_15_Time_1_ms_(66.03%)_Space_41.7_MB_(9.89%)
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int integerReplacement(int n) {
Map dp = new HashMap<>();
return solve(n, dp);
}
private int solve(int n, Map dp) {
if (n == 1) {
return 0;
}
if (dp.containsKey(n)) {
return dp.get(n);
}
int ans;
if (n % 2 == 0) {
ans = 1 + solve(n >>> 1, dp);
} else {
ans = 1 + Math.min(solve(n + 1, dp), solve(n - 1, dp));
}
dp.put(n, ans);
return ans;
}
}