给定一个正整数 n
,你可以做如下操作:
- 如果
n
是偶数,则用n / 2
替换n
。 - 如果
n
是奇数,则可以用n + 1
或n - 1
替换n
。
返回 n
变为 1
所需的 最小替换次数 。
示例 1:
输入:n = 8
输出:3
解释:8 -> 4 -> 2 -> 1
示例 2:
输入:n = 7
输出:4
解释:7 -> 8 -> 4 -> 2 -> 1
或 7 -> 6 -> 3 -> 2 -> 1
示例 3:
输入:n = 4
输出:2
解法:
模拟(递归+记忆化搜索)
java
public class Solution {
public int integerReplacement(int n)
{
return dfs(n*1l);
}
public int dfs(long n)
{
if(n==1){
return 0;
}
if(n%2==0)
{
return 1+ dfs(n/2);
}else {
return 1+Math.min(dfs(n-1),dfs(n+1));
}
}
public static void main(String[] args) {
Solution solution=new Solution();
int n= 8;
System.out.println(solution.integerReplacement(n));
}
}