题目描述:Leetcode 0322 零钱兑换
分析
本题的考点:背包问题。
完全背包问题,amout
为容量;物品体积为coins[i]
,价值为1
。
本题和Leetcode 0279 完全平方数十分类似,可以参考LC279的分析。
注意本题和Leetcode 0518 零钱兑换 II的区别,LC518
让求得是体积恰好是m
的方案数,本题求的是体积恰好是m
需要用的最少硬币数。
代码
class Solution {
public:
int coinChange(vector<int> &coins, int m) {
vector<int> f(m + 1, 1e8);
f[0] = 0;
for (auto v : coins)
for (int j = v; j <= m; j++)
f[j] = min(f[j], f[j - v] + 1);
if (f[m] == 1e8) return -1;
return f[m];
}
};
class Solution {
public int coinChange(int[] coins, int m) {
int[] dp = new int[m + 1];
Arrays.fill(dp, m + 1);
dp[0] = 0;
for (int v : coins)
for (int j = v; j <= m; j++)
dp[j] = Math.min(dp[j], dp[j - v] + 1);
return dp[m] == m + 1 ? -1 : dp[m];
}
}
时空复杂度分析
时间复杂度: O ( n × m ) O(n \times m) O(n×m),n
为不同面值的硬币数,m
为总金额。
空间复杂度: O ( m ) O(m) O(m)。
分析
本题的考点:背包问题。
本题将amout
简记为m
。问题是:给我们一个容量为m
的背包,每个物品的体积由coins
给出,每个物品可以使用无数次,问恰好装满背包的方案数。
本题就是一个完全背包问题。关于背包问题可以参考:背包问题(背包九讲)。
注意本题和Leetcode 0322 零钱兑换的区别,LC322
让求的是体积恰好是m
需要用的最少硬币数,本题求得是体积恰好是m
的方案数,还有一类最常规的让求最大价值(体积不超过m
的最大价值,体积恰好是m
的最大价值,体积不小于m
的最小耗费)。
另外注意本题和Leetcode 0377 组合总和 Ⅳ,和本题的唯一区别在于,认为1,2
和2,1
是不同的方案。因此LC377
先循环体积,再循环物品,这样对于每个体积,可以根据最后一个放入的数据分为n
类,因此可以实现不同顺序是不同方案。完全背包最初的分析(见背包九讲的分析),是每个物品放置几个数据,因此不同顺序认为是相同方案。
代码
class Solution {
public:
int change(int m, vector<int>& coins) {
vector<int> f(m + 1);
f[0] = 1;
for (int v : coins)
for (int j = v; j <= m; j++)
f[j] += f[j - v];
return f[m];
}
};
class Solution {
public int change(int m, int[] coins) {
int[] f = new int[m + 1];
f[0] = 1;
for (int v : coins)
for (int j = v; j <= m; j++)
f[j] += f[j - v];
return f[m];
}
}
class Solution:
def change(self, m: int, coins: List[int]) -> int:
f = [0 for _ in range(m + 1)]
f[0] = 1
for v in coins:
for j in range(v, m + 1):
f[j] += f[j - v];
return f[m]
时空复杂度分析
时间复杂度: O ( n × m ) O(n \times m) O(n×m),n
为数组长度,m
是题目中的amout
。
空间复杂度: O ( n × m ) O(n \times m) O(n×m)。
文章浏览阅读5.8k次,点赞7次,收藏35次。只要random.seed( * ) seed里面的值一样,那随机出来的结果就一样。所以说,seed的作用是让随机结果可重现。也就是说当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数。使用同一个种子,每次生成的随机数序列都是相同的。_numpy random
文章浏览阅读424次。视频地址:http://v.youku.com/v_show/id_XNjI3NjMzOTI4.html?f=20609548_旺旺老师javase
文章浏览阅读1.8k次。先从 TextBox 控件 说起,TextBox控件是输入框,类似于html中的 标签,_windows控件taxtbox password
文章浏览阅读100次。朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护。 如今,使用Java和Spring Boot开发微服务架构非常流行。 它绝对是Java生态系统中最受欢迎的组合之一。 如果需要任何证据,只需看看过去几年出现的所有类似框架:MicroProfile,Micronaut和Quar..._jhipster mvn jib
文章浏览阅读6.9w次,点赞325次,收藏700次。一个愿意伫立在巨人肩膀上的农民......_matlab2023b
文章浏览阅读1.3k次。问题描述:在做了配置变更之后,server启动不起来。还原配置,依然存在这启动故障。this is the log :[8/23/15 12:09:20:276 CST] 00000001 WsServerImpl E WSVR0009E: Error occurred during startupcom.ibm.ws.exception.RuntimeError: o..._关键点恢复期间捕捉到异常!com.ibm.ws.recoverylog.spi.internallogexception
文章浏览阅读7.5w次,点赞145次,收藏787次。本文通过开发一个简单的小游戏,来带领大家实操一下开发小游戏的基本流程。快来和博主一起操作吧!!!_微信小游戏开发
文章浏览阅读1.7w次,点赞16次,收藏17次。@NonNull 注解可以标注在方法、字段、参数之上,表示对应的值不能为空; @Nullable 注解可以标注在方法、字段、参数之上,表示对应的值可以为空;如果可以传入 NULL 值,则标记为 @Nullable,如果不可以,则标注为 @NonNull。那么在做一些不安全严谨操作的编码时,这些注释会给我们一些警告。如下是我看 Spring 源码(DelegatingEntityResolver 类)时,发现用到的 @Nullable。以上图片中关于修改的地方是把 Spring 源码里的空行._java @nullable
文章浏览阅读554次。Episode 61 of The SitePoint Podcast is now available! This week your hosts are Patrick O’Keefe (@iFroggy), Stephan Segraves (@ssegraves), and Kevin Yank (@sentience). SitePoint Podcast的 第61集现已发布! 本周的...
文章浏览阅读775次。反病毒引擎设计创建时间:2003-10-02文章属性:转载文章提交:NJUE (admin_at_ourmm.com)本文将对当今先进的病毒/反病毒技术做全面而细致的介绍,重点当然放在了反病毒上,特别是虚拟机和实时监控技术。文中首先介绍几种当今较为流行的病毒技术,包括获取系统核心态特权级,驻留,截获系统操作,变形和加密等。然后分五节详细讨论虚拟机技术:第一节简单介绍一下虚拟
文章浏览阅读1w次。此blog停止更新,请访问最新域名 http://blog.lokizone.com_域名访问升级紧急中拿笔记好
文章浏览阅读1.1w次,点赞8次,收藏23次。角色控制器 (Character Controller)一、简介角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制。如果要创建类人角色,可使用角色控制器 (Character Controller)。这可以是第三人称游戏 (Third Person Platformer) 中的主角色、FPS 射击者或任何敌人角色。二、基本概念第三人称游戏中的这..._charactercontroller