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-java21 Show documentation
Show all versions of leetcode-in-java21 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;
/**
* 397 - Integer Replacement\.
*
* Medium
*
* Given a positive integer `n`, you can apply one of the following operations:
*
* 1. If `n` is even, replace `n` with `n / 2`.
* 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`_.
*
* **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
**/
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;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy