贪心算法(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));
    }
}
相关推荐
djarmy3 小时前
MAIN.c(1): warning C318: can’t open file ‘STC8G.H’ 报错 解决 分析
c语言·开发语言·mongodb
HEJOO93 小时前
深入理解 Java volatile 关键字:原理、用法与常见误区
java·开发语言·spring
曹牧3 小时前
Java:no content to map due to end of input
java·开发语言
梦梦代码精4 小时前
《回收租赁系统技术选型避坑指南:业务闭环与二开自由度详解》
开发语言·低代码·docker·开源·代码规范
隔窗听雨眠4 小时前
记一次SQL Server数据库性能分析:从CPU100%到单配置修复的完整诊断
开发语言·数据库·php
David猪大卫4 小时前
【C++修炼】智能指针使用及原理
开发语言·c++·经验分享·笔记·学习·考研·面试
charlie1145141914 小时前
现代Qt开发之图像处理进阶:像素操作与格式转换
开发语言·图像处理·qt
李永奉4 小时前
中科蓝讯SDK开发-BT893x 面条耳机连接vivo手机后连接APP端,最后手机端设置页面手动断开蓝牙连接,此时耳机端假断开
c语言·开发语言·嵌入式硬件·物联网·智能手机·电脑
2601_967760784 小时前
2026年PDF压缩与页码添加工具技术实测:性能、算法与本地化适配深度对比
算法·pdf
秦老师Q5 小时前
php零基础入门到实战,从语法到框架,一篇搞定
开发语言·php