代码随想录Day45|70.爬楼梯(进阶)、322.零钱兑换、279.完全平方数

news2025/1/16 6:00:41

文章目录

  • 70.爬楼梯(进阶)
  • 322.零钱兑换
  • 279.完全平方数

70.爬楼梯(进阶)

文章讲解:代码随想录 (programmercarl.com)

题目链接:programmercarl

题目:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

改为:一步一个台阶,两个台阶,三个台阶,…,直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

分析:

  1. 确定dp数组以及下标的含义

    dp[i]:爬到有i个台阶的楼顶有dp[i]种方法

  2. 确定递推公式

    dp[i] += dp[i - j];

  3. dp数组如何初始化

    由递推公式可得dp[0] = 1

  4. 确定遍历顺序

    因为{1,2}和{2,1}不同,相当于是排列问题,所以target放在外循环,nums放在外循环,nums可以重复使用,所以从左向右遍历

  5. 举例来推导dp数组

class Solution {
public:
    int climbStais(int n) {
        vector<int> dp(n + 1, 0);
        dp[0] = 1;
        for (int i = 0; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (i - j >= 0) dp[i] += dp[i - j];
            }
        }
        return dp[n];
    }
};

题目中将m改为2 就可以 AC 代码了

322.零钱兑换

文章讲解:代码随想录 (programmercarl.com)

题目链接:322. 零钱兑换 - 力扣(LeetCode)

题目:

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。

你可以认为每种硬币的数量是无限的。

分析:

  1. 确定dp数组以及下标的含义

    dp[j]:凑总金额i需要的最少硬币个数

  2. 确定递推公式

    凑总金额为 j - coins[i] 需要的最少硬币数为 dp[j - conis[i]], 那么加上一个硬币coins[i] 数量 + 1

    所以 dp[j] = min(dp[j], dp[j - conis[i]] + 1);

  3. dp数组如何初始化

    dp[0] = 0; 其他的为了可以被覆盖,初始化为最大值;

  4. 确定遍历顺序

    最小个数,跟组合和排列无关,所以两个for循环都可以。因为硬币的数量可以无限使用,所以是完全背包,内循环是正循环;

  5. 举例推导dp数组

    322.零钱兑换

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> dp(amount + 1, INT32_MAX);
        dp[0] = 0;
        for (int i = 0; i < coins.size(); i++) {
            for (int j = coins[i]; j <= amount; j++) {
                if (dp[j - coins[i]] != INT32_MAX) {
                    dp[j] = min(dp[j], dp[j - coins[i]] + 1);
                }
            }
        }
        if (dp[amount] == INT32_MAX) return -1;
        return dp[amount];
    }
};

279.完全平方数

文章讲解:代码随想录 (programmercarl.com)

题目链接:279. 完全平方数 - 力扣(LeetCode)

题目:

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。

完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。

分析:

  1. 确定dp数组(dp table)以及下标的含义

    dp[j]:和为j的完全平方数的最少数量为dp[j]

  2. 确定递推公式

    dp[j] 可以由dp[j - i * i]推出, dp[j - i * i] + 1 便可以凑成dp[j]。

    此时我们要选择最小的dp[j],所以递推公式:dp[j] = min(dp[j - i * i] + 1, dp[j]);

  3. dp数组如何初始化

    dp[0]表示 和为0的完全平方数的最小数量,那么dp[0]一定是0。

    从递归公式dp[j] = min(dp[j - i * i] + 1, dp[j]);中可以看出每次dp[j]都要选最小的,所以非0下标的dp[j]一定要初始为最大值,这样dp[j]在递推的时候才不会被初始值覆盖

  4. 确定遍历顺序

    我们知道这是完全背包,

    如果求组合数就是外层for循环遍历物品,内层for遍历背包。

    如果求排列数就是外层for遍历背包,内层for循环遍历物品。

    所以本题外层for遍历背包,内层for遍历物品,还是外层for遍历物品,内层for遍历背包,都是可以的!

  5. 举例推导dp数组

    279.完全平方数

class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n + 1, INT32_MAX);
        dp[0] = 0;
        for (int i = 1; i * i <= n; i++) {
            for (int j = i * i; j <= n; j++) {
                dp[j] = min(dp[j], dp[j - i * i] + 1);
            }
        }
        return dp[n];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/74372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C#基础学习】第十六章、枚举

目录 枚举 1.枚举的补充 1.1底层类型 1.2 设置显式值 1.3 枚举成员赋值顺序 2.位标志 2.1 Flags特性 枚举 枚举的定义&#xff1a; 枚举是由程序员自定义的值类型。它只有一种类型成员&#xff1a;命名的整数值常量。枚举成员都有一个底层类型的常量值。第一个枚举成员的…

【场景削减】拉丁超立方抽样方法场景削减(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Linux搭建RabbitMQ集群环境

文章目录环境说明Erlang安装下载安装包安装验证RabbitMQ安装下载安装包安装启动RabbitMQ设置开机自动启动安装管理界面创建用户登录管理界面集群配置前提条件构建erlang集群高可用镜像集群配置环境说明 操作系统&#xff1a;CentOS7Erlang版本&#xff1a;21.3RabbitMQ版本&am…

信而泰耦合测试-网络测试仪实操

一、耦合测试原理 1.产生背景​ 常用测试无线设备过程中&#xff0c;将无线设备置于屏蔽箱中&#xff0c;通过无线网卡连接并运行iperf等类似软件的方式检测所述无线设备的吞吐量。 相关技术中将所述无线设备置于所述屏蔽箱中的检测方法&#xff0c;由于所述屏蔽箱存在信号反…

【C语言】字符串函数(二)

目录 一、strncpy函数(字符串拷贝) 1、strncpy函数的用途 2、strncpy函数的使用 二、strncat函数(字符串追加) 1、strncat函数的用途 2、strncat函数的使用 三、strncmp函数(两个字符串比较) 1、strncmp函数的用途 2、strncmp函数的使用 四、strstr函数(查找字符串) 1、strstr函…

2022年底总结(被阿里捞的第1、2、3...次)

前言 自从去年因为个人原因没有去阿里淘系&#xff0c;后面有几次阿里同学问我有没有意向去阿里上班。其实我内心是很激动的&#xff0c;在人才库能被捞也是别人的认可&#xff0c;这个是值得骄傲的&#xff0c;然后需要继续保持自己专研技术的精神以及不断进步的意识。 当然博…

ChatGPT 大智近妖,从宇宙人生到手搓光刻机,从哄女友到写年终总结我们聊得非常开心,反而让人越来越忧心

文章目录宇宙人生问&#xff1a;你觉得人生的意义是什么&#xff1f;问&#xff1a;你觉得思维意识到底是什么问&#xff1a;我之前的两个问题大概有多少人问过你&#xff1f;问&#xff1a;宇宙的边界在哪里&#xff1f;手搓狠活怎么实现量子计算怎么制造一个光刻机怎么制作核…

多谐振荡器

三个非门首尾相接形成环&#xff0c;在理想情况下&#xff0c;无法形成振荡 门一定是存在传输延迟时间的&#xff0c;所以当高电平变成低电平的时候&#xff0c;必然会经过传输延迟时间 所以当反过来发生翻转的时候&#xff0c;经过了三倍的状态延迟时间 震荡的周期是六个传输…

基于SARIMA、XGBoost和CNN-LSTM的时间序列预测对比

利用统计测试和机器学习分析和预测太阳能发电的性能测试和对比 本文将讨论通过使用假设测试、特征工程、时间序列建模方法等从数据集中获得有形价值的技术。我还将解决不同时间序列模型的数据泄漏和数据准备等问题&#xff0c;并且对常见的三种时间序列预测进行对比测试。 介…

RNSScreenStackHeaderConfig“ was not found in the UIManager.解决办法!!亲测有效

Invariant Violation: requireNativeComponent: "RNSScreenStackHeaderConfig" was not found in the UIManager. 原因&#xff1a;RN项目中&#xff0c;开发服务器端已经使用npm i下载了某个模块&#xff0c;但是只有服务器端有&#xff0c;该模块并没有打包安装到手…

Cache与MMU的爱恨纠缠

首先声明本文不准备详细地介绍Cache和MMU的概念和用法&#xff0c;主要是为了厘清两者之间的相互关系和依赖。 1. MMU管理cache访问属性 在没有MMU的时候&#xff0c;cache本身的模型比较简单&#xff0c;如下所示&#xff0c;在使用的时候重点关注Cache数据的一致性问题。 …

linux高可用小知识点汇总-行云管家

不少运维小伙伴对于linux高可用相关知识不是很了解&#xff0c;今天我们小编就给大家汇总了一些&#xff0c;希望可以加深大家的了解。仅供参考哦&#xff01; linux高可用小知识点汇总-行云管家 一、Linux是什么系统&#xff1f; 【回答】&#xff1a;Linux全称GNU/Linux&am…

小蓝本 第一本《因式分解技巧》 第二章 应用公式 笔记(第二天)

小蓝本 第一本《因式分解技巧》 第二章 应用公式 笔记&#xff08;第二天&#xff09;前言二代——应用公式常见公式公式场景公式分类基本间接推导公式(9)、(10)的推导问题分解方法方法1方法2公式推导总结&#xff1a;对照思想小技巧与注意事项习题2题目题解经验前言 第二天op…

基于贝叶斯网络的考虑不确定性的短期电能负荷预测(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

元年SecDevOps的实践之路

随着DevOps的发展&#xff0c;企业的数字化转型的需求也愈发强烈&#xff0c;DevOps大幅提升了企业应用迭代的速度。但同时&#xff0c;安全如果不能跟上步伐&#xff0c;不仅会抵消DevOps变革带来的提升&#xff0c;拖慢企业数字化转型的进程&#xff0c;还会导致漏洞与风险不…

Virtual Private Network

VPN技术的运行机制与发展 虚拟专用网络(Virtual Private Network,VPN)是利用不可靠的公用互联网络作为信息传输媒介&#xff0c;通过附加的安全隧道、用户认证和访问控制等技术实现与专用网络相类似的安全性能&#xff0c;从而实现对重要信息的安全传输。 根据技术应用环境的…

kotlin之循环控制

for循环 for 循环可以对任何提供迭代器&#xff08;iterator&#xff09;的对象进行遍历 java for循环写法 public static void main(String[] args) {int i 10;for (int j 0; j < i; j) {System.out.println(j);}} int[] q{1,2,3,4,5,6,7,8,9,10};for (int j:q) {System…

lammps笔记-入门

1 输入文件 输入脚本文件&#xff08;命令文件&#xff1f;&#xff09;要包含五个部分&#xff1a; # 1) Initialization # 2) System definition # 3) Simulation settings # 4) Visualization # 5) Run 这五个部分不一定全都需要&#xff0c;也不一定完全按如下顺序。…

html在线商城购物网站制作——基于HTML+CSS+JavaScript鲜花礼品电商网站

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

目标检测算法——图像分割数据集汇总 2(附下载链接)

>>>深度学习Tricks&#xff0c;第一时间送达<<< &#x1f384;&#x1f384;近期&#xff0c;小海带在空闲之余&#xff0c;收集整理了一批图像分割数据集供大家参考。 整理不易&#xff0c;小伙伴们记得一键三连喔&#xff01;&#xff01;&#xff01;&am…