关注
两套代码solution1,solution2; 复杂度分析: 可以用DP做,这里我提供两个代码。都是基于DP,他们在m等于10000以下,一秒内都可以运行完。solution1在M比较小的时候比solution2快(m不超过十万),复杂度都是m平方。在m比较小的时候(十万以下),solution1明显比2快。(solution1前面的常数小)。 代码解释: solution1 代码中dp 是一个二维数组:dp[index][sum],index表示第index种货币,sum表示当前需要组合成的数. dp[index][sum] 表示用第大于等于下标为index的硬币组成SUM这个数有多少种方式。 那么可以导出这样一个公式: 式中index 代表硬币的下标。(我的代码里下标为0的硬币是100,下标为1的是50.。。。),value是当前下标硬币的值,num是当前硬币的数量。 我们所要求的的是用下标大于等于0的硬币(就是所有硬币)组成数M的方式有多少种。 solution2: dp 数组仍然是二维数组,dp[index][sum] 中的index,sum意义不变,但是dp[index][sum]本身的意义有很小的变化:dp[index][sum] 代表它被访问的次数。.举个例子:m=101;一种可能的组合 1*100+0*50+0*20+。。。+1*1;还有一种组合 0*100+2*50+。。。+1*1;可以看到,第一种组合为1,0,0,0,0,0,1,第二种为0,2,0,0,0,0,1,他们在在访问第三种硬币的时候,都是要求第二种以后的硬币组合出一个1(因为前两种(下标0,1)已经组合出了100),所以需要后面下标为2,3,4,5,6种硬币组合出1;也就是说dp[2][1]被访问了两次。这样也就是说,我们只需要统计最后一种硬币在所有可能的和上被访问的次数,也就是我们的总次数。 递推公式为: value是index硬币的值,num是数量。 如果不用递归函数,空间复杂度还其实可以优化,因为每个状态只跟上一个状态有关。 具体代码注释下一条。
查看原帖
点赞 评论
相关推荐
12-17 17:15
华东师范大学 运营 点赞 评论 收藏
分享
牛客热帖
更多
- 1... 27届学院二本,袋鼠云->快手->腾讯wxg,25年末聊聊我的前端之路1.5W
- 2... 本科五段大厂实习,秋招五个offer,我的校招结束了7425
- 3... 适可而止吧!你就是“烂泥”5896
- 4... 大四双非水产专业上岸阿里后端(五)5699
- 5... 我的世界观,就是对抗优绩主义的武器3799
- 6... 27双非杀入字节!2758
- 7... 26届双非硕Java秋招总结1644
- 8... 日常实习-小红书后端java二面1578
- 9... 实习被“放养”零产出,该及时止损还是继续苟着?1540
- 10... 大厂工作强度从夯到拉,B站真爽1474
正在热议
更多
# 实习没人带,苟住还是跑路? #
2147次浏览 67人参与
# 工作中的卑微时刻 #
29855次浏览 190人参与
# 元旦假期你打算怎么过 #
2803次浏览 85人参与
# 过年期间可能会经历的尴尬瞬间 #
48531次浏览 313人参与
# 我们是不是被“优绩主义”绑架了? #
4396次浏览 175人参与
# 从夯到拉,评价编程语言 #
27837次浏览 148人参与
# 如何看待应届生身份? #
210771次浏览 2234人参与
# 查收我的offer竞争力报告 #
263820次浏览 1644人参与
# 多益网络工作体验 #
60204次浏览 300人参与
# 牛客2025仙途报告 #
21505次浏览 325人参与
# 机械制造面试记录 #
299898次浏览 3143人参与
# 实习心态崩了 #
96585次浏览 494人参与
# 华为工作体验 #
277234次浏览 1355人参与
# 26届秋招投递记录 #
109339次浏览 652人参与
# 实习打杂,要跑路吗 #
54332次浏览 330人参与
# 你有哪些缓解焦虑的方法? #
44779次浏览 873人参与
# 找工作,行业重要还是岗位重要? #
88307次浏览 1769人参与
# 华为池子有多大 #
154591次浏览 867人参与
# 今年你最想重开的一场面试是? #
18186次浏览 174人参与
# 参加过提前批的机械人,你们还参加秋招么 #
105349次浏览 1647人参与

