贪心算法(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));
    }
}
相关推荐
赴生-35 分钟前
C++进阶 异常
开发语言·c++
黄毛火烧雪下1 小时前
Java 核心知识点总结(一)
java·开发语言
其实防守也摸鱼1 小时前
软件安全与漏洞--软件安全编码与防御技术理论题库
开发语言·网络·安全·网络安全·软件安全·软件安全与漏洞
x138702859571 小时前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
海兰1 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
iCxhust1 小时前
C#进程管理程序
开发语言·汇编·stm32·单片机·c#·微机原理
凡人叶枫2 小时前
Effective C++ 条款28:避免使用 handles 指向对象内部
linux·服务器·开发语言·c++·嵌入式开发
努力成为AK大王2 小时前
并发编程的核心挑战、优化方案与核心知识点总结
java·开发语言·数据库
zwenqiyu2 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法
wayz112 小时前
Momentum:TSI(真实强度指数)技术指标详解
算法·金融·数据分析·量化交易·特征工程