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

news2024/10/7 6:39:34

目录

70. 爬楼梯 (进阶)

322. 零钱兑换 

思路 

代码 

279.完全平方数 

思路 


70. 爬楼梯 (进阶)

70. 爬楼梯 - 力扣(LeetCode) 

 

// 版本一
class Solution {
public:
    int climbStairs(int n) {
        if (n <= 1) return n; // 因为下面直接对dp[2]操作了,防止空指针
        vector<int> dp(n + 1);
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) { // 注意i是从3开始的
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
// 版本二
class Solution {
public:
    int climbStairs(int n) {
        if (n <= 1) return n;
        int dp[3];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            int sum = dp[1] + dp[2];
            dp[1] = dp[2];
            dp[2] = sum;
        }
        return dp[2];
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

322. 零钱兑换 

322. 零钱兑换 - 力扣(LeetCode) 

 

思路 

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

        dp[j]:凑足总额为j所需钱币的最少个数为dp[j] 

2. 确定递推公式

dp[j] = min(dp[j - coins[i]] + 1, dp[j]);

3. dp数组初始化

vector<int> dp(amount + 1, INT_MAX);
dp[0] = 0;

4. 确定遍历顺序

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

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

        遍历顺序为:coins(物品)放在外循环,target(背包)在内循环。且内循环正序。 

5. 举例推导dp数组

代码 

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> dp(amount + 1, INT_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]] != INT_MAX) { // 如果dp[j - coins[i]]是初始值则跳过
                    dp[j] = min(dp[j - coins[i]] + 1, dp[j]);
                }
            }
        }
        if (dp[amount] == INT_MAX) return -1;
        return dp[amount];
    }
};
  • 时间复杂度: O(n * amount),其中 n 为 coins 的长度
  • 空间复杂度: O(amount)

279.完全平方数 

279. 完全平方数 - 力扣(LeetCode) 

 

思路 

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

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

2. 确定递推公式

dp[j] = min(dp[j - i * i] + 1, dp[j]);

3. dp数组初始化

        dp[0] = 0, 非0下标的dp[j]一定要初始为最大值,这样dp[j]在递推的时候才不会被初始值覆盖。 

4. 确定遍历顺序

vector<int> dp(n + 1, INT_MAX);
dp[0] = 0;
for (int i = 0; i <= n; i++) { // 遍历背包
    for (int j = 1; j * j <= i; j++) { // 遍历物品
        dp[i] = min(dp[i - j * j] + 1, dp[i]);
    }
}

5. 举例推导dp数组 

class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n + 1, INT_MAX);
        dp[0] = 0;
        for (int i = 0; i <= n; i++) { // 遍历背包
            for (int j = 1; j * j <= i; j++) { // 遍历物品
                dp[i] = min(dp[i - j * j] + 1, dp[i]);
            }
        }
        return dp[n];
    }
};
  • 时间复杂度: O(n * √n)
  • 空间复杂度: O(n)

笔记参考:代码随想录 

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

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

相关文章

汽配行业数字工厂管理系统解决方案

随着汽车行业的快速发展&#xff0c;汽配行业作为汽车产业链的重要组成部分&#xff0c;也面临着日益增长的市场需求和竞争压力。然而&#xff0c;传统行业在管理方面存在一系列问题&#xff0c;如管理效率低下、业务流程不优化、供应链不透明等。为了应对这些挑战&#xff0c;…

更快更复杂之—Mendix如何支持多种AI部署模式

在过去十年&#xff0c;LCAP市场逐渐崛起的同时&#xff0c;计算能力不断提高、大数据可用性不断增强&#xff0c;预计未来数年&#xff0c;低代码应用平台&#xff08;LCAP&#xff09;的市场将增长30%左右&#xff0c;并带动人工智能&#xff08;AI&#xff09;迎来新的春天。…

【Spring Boot】单元测试

单元测试 单元测试在日常项目开发中必不可少&#xff0c;Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持&#xff0c;以及如何在Spring Boot项目中进行单元测试。 1.Spring Boot集成单元测试 单元测试主要用…

Windows下控制台播放Badapple,opencv的使用,以及代码优化方案

Windows下控制台播放Badapple 环境准备 VS2022编译环境Opencv(对图像进行灰度处理)的配置 可以看我写的这篇文章vs下opencv的配置素材(Badpple的视频文件) 可以私信我FFmpeg(对视频文件进行处理) 让视频文件的声音分离出来生成mp3文件 ffmpeg -i test.mp4 -map 0:v:0 -c copy…

MySQL用户权限管理和密码策略

目录 用户和权限介绍 密码策略 修改密码策略 用户权限管理 赋予权限 收回权限 用户和权限介绍 所有用户的信息都保存在mysql.user 数据表中 可使用desc 查看数据表结构 user 常用字段 部分字段解析 完整的账户 包含host和user&#xff0c;都是char型 都没有默认值 ho…

fork函数,为什么有两次返回?

前言 fork函数用于创建一个新进程&#xff0c;称为子进程&#xff0c;它与旧进程&#xff08;称为系统调用fork的进程&#xff09;同时运行&#xff0c;此进程称为父进程。 创建新的子进程后&#xff0c;两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc&a…

网络传输层协议详解(TCP/UDP)

目录 一、TCP协议 1.1、TCP协议段格式 1.2、TCP原理 确认应答机制 超时重传机制 (安全机制) 连接管理机制(安全机制) 滑动窗口 流量控制(安全机制) 拥塞控制 延迟应答(效率机制) 捎带应答&#xff08;效率机制&#xff09; ​编辑面向字节流(粘包问题) 缓…

[pyqt5]如何给工具栏图标添加资源文件

第一步新建一个qrc文件 首先新建一个 .qrc 文件&#xff0c;内容格式如下&#xff1a; <RCC><qresource prefix"/" ><file>img/image1.png</file><file>img/image2.png</file><file>img/image3.png</file></qr…

解决win11系统下vivado使用RTL分析闪退、小蓝熊easy anti chat无法启动问题

最近在接触使用vivado时被这个软件庞大的包体和繁多的报错搞得焦头烂额&#xff0c;经过多次尝试&#xff0c;我解决了两个困扰我许久的关乎软件正常使用的问题&#xff0c;将解决办法分享给大家。 一.RTL analysis运行闪退 这个问题关系到程序的正常使用&#xff0c;主要发生…

css animation动画

代码 <!DOCTYPE html> <html ng-app"my_app"><head><meta charset"utf-8"><title></title><script type"text/javascript"></script><style type"text/css">.my-animation {p…

关于海外的应用商店优化

应用商店优化的工作方式与搜索引擎优化 (SEO) 类似&#xff0c;但它有专门为应用商店设计的专业功能。应用商店优化可以帮助应用程序出现在应用商店的顶部结果中&#xff0c;从而提高下载转化率和应用安装量&#xff0c;并且对于我们的应用也有长期可见性。 应用商店优化是一个…

本地用户管理(NETBASE第九课)

本地用户管理(NETBASE第九课) 本地用户&#xff1a;用户本地创建、本地存储、本地登录且只能登录本地一台计算机。 1.认识用户帐户&#xff1a; 1&#xff09;Windows帐户有帐户名、有密码、用户安全标识&#xff08;SID&#xff09; 注:SID安全标识符&#xff08;身份证号…

数据结构-二叉树的代码实现(详解)

内容&#xff1a;二叉树的前、中&#xff0c;后序遍历&#xff0c;层序遍历&#xff0c;二叉树节点个数&#xff0c;叶子节点个数&#xff0c;二叉树高度&#xff0c;第k层节点的个数&#xff0c;查找某个节点&#xff0c;二叉树销毁&#xff0c;判断是否为完全二叉树 目录 前…

科研热点|《电气工程领域高质量科技期刊分级目录(2022版)》公示!

为贯彻落实《关于深化改革 培育世界一流科技期刊的意见》&#xff0c;推进国内外科技期刊的同质等效使用&#xff0c;助力我国科技期刊高质量发展&#xff0c;在中国科协的统一部署下&#xff0c;中国电工技术学会制定《电气工程领域高质量科技期刊分级目录发布工作实施方案&am…

【HarmonyOS】ArkTS学习之页面转场动画的实现

【关键字】 ArkTS、转场动画、PageTransitionEnter、PageTransitionExit 【介绍】 动画交互的实现是一种提升用户体验的方式。动画分为属性属性动画、显示动画、转场动画和路径动画&#xff0c;而转场动画又包含页面间转场、组件内转场和共享元素转场。我觉得页面转场动画挺有趣…

电机的调压调速和PWM调速方法的性能比较、应用场景简介

电机的调压调速和PWM调速是两种不同的电机控制方式。 调压调速&#xff1a;调压调速是通过改变电机输入电压的大小来控制电机的转速和扭矩。通过调节电压&#xff0c;可以改变电机的转矩特性和转速。这种调速方式适用于直流电机和某些类型的交流电机&#xff0c;如感应电动机。…

Windows电源模式(命令行)

一、简介 windows使用powercfg.exe来控制电源方案,像cmd.exe一样,powercfg.exe也是windows自带的。 powercfg命令行选项 选项说明/?、-help显示有关命令行参数的信息。/list、/L列出所有电源方案。/query、/Q显示电源方案的内容。

华为云CodeArts DevSecOps系列插件——助力更高效的软件研发

HDC期间入驻华为云&#xff0c;可参与Toolkit插件抽奖活动&#xff0c;活动链接在文末 一、前言 DevOps的概念想必大家都不陌生&#xff0c;它是一组过程、方法与系统的统称&#xff0c;通过它可以对交付速率、协作效率、部署频率速率、质量、安全和可靠性等进行提升改善。相比…

Linux——信号发送代码

目录 一.信号集操作函数 sigpromask函数 代码详解&#xff1a; ​编辑 考虑情况一&#xff1a;对多个信号的屏蔽 考虑情况二&#xff1a;取消对信号的阻塞 运行结果&#xff1a; 考虑情况三&#xff1a;若不想让进程退出&#xff0c;采用自定义捕捉信号方式&#xff01;…

Java阶段五Day02

Java阶段五Day02 文章目录 Java阶段五Day02MAVEN-聚合(多模块3)回顾多模块2个特性依赖:继承: 聚合场景聚合目的实现聚合聚合总结 远程仓库远程仓库概念配置settings.xml远程库配置注意事项 GIT详细学习git概括git历史本地版本控制相关命令git分支管理分支管理基本概念分支管理相…