贪心算法(20)(java)整数替换

给定一个正整数 n ,你可以做如下操作:

  1. 如果 n是偶数,则用 n / 2替换 n
  2. 如果 n是奇数,则可以用 n + 1n - 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));
    }
}
相关推荐
曲莫终11 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
iuu_star12 小时前
C语言数据结构-顺序查找、折半查找
c语言·数据结构·算法
ghie909012 小时前
基于MATLAB GUI的伏安法测电阻实现方案
开发语言·matlab·电阻
Gao_xu_sheng12 小时前
Inno Setup(专业安装/更新 EXE)
开发语言
Yzzz-F12 小时前
P1558 色板游戏 [线段树 + 二进制状态压缩 + 懒标记区间重置]
算法
漫随流水12 小时前
leetcode算法(515.在每个树行中找最大值)
数据结构·算法·leetcode·二叉树
mit6.82413 小时前
dfs|前后缀分解
算法
吴声子夜歌13 小时前
Java数据结构与算法——基本数学问题
java·开发语言·windows
扫地的小何尚13 小时前
NVIDIA RTX PC开源AI工具升级:加速LLM和扩散模型的性能革命
人工智能·python·算法·开源·nvidia·1024程序员节
wanglei20070813 小时前
生产者消费者
开发语言·python