程序员面试金典 - 面试题 08.11. 硬币

题目难度: 中等

原题链接

今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~

题目描述

硬币。给定数量不限的硬币,币值为 25 分、10 分、5 分和 1 分,编写代码计算 n 分有几种表示法。(结果可能会很大,你需要将结果模上 1000000007)

示例 1:

  • 输入: n = 5
  • 输出:2
  • 解释: 有两种方式可以凑成总金额:
    • 5=5
    • 5=1+1+1+1+1

示例 2:

  • 输入: n = 10
  • 输出:4
  • 解释: 有四种方式可以凑成总金额:
    • 10=10
    • 10=5+5
    • 10=5+1+1+1+1+1
    • 10=1+1+1+1+1+1+1+1+1+1

说明:

你可以假设:

0 <= n (总金额) <= 1000000

题目思考

  1. 如何利用已经计算出的结果?

解决方案

思路
  • 分析题目, 考虑得到 n 分的最后一枚硬币, 它可以是 25 分、10 分、5 分和 1 分
  • 也就是说, 要得到 n 分的表示法, 只需要累加 n-25, n-10, n-5 以及 n-1 的方案数
  • 所以我们可以利用动态规划的思路, 累加之前的结果, 求出每一分的表示方案数, 最终 n 分的方案数即为所求
  • 具体做法就是, 对于每一种硬币 c, 计算从 c 到 n 分的表示方案数, 对于每个总和 sm, 都有 dp[sm]=dp[sm]+dp[sm-c] (c<=sm<=n)
  • 另外注意初始化 0 分的方案数为 1, 代表什么硬币都不用的情况
复杂度
  • 时间复杂度 O(NC): 外层循环遍历每种硬币, 内层循环遍历总和, 所以是 N*C (C 是硬币种类数)
  • 空间复杂度 O(N): 使用了一个长度为 N 的数组存各个总和的方案数
代码
class Solution:
    def waysToChange(self, n: int) -> int:
        # 动态规划, dp[sm]存总和为sm的方案数
        # 对于每一种硬币c, 都有dp[sm]=dp[sm]+dp[sm-c] (c<=sm<=n)
        MOD = 1000000007
        coins = [1, 5, 10, 25]
        dp = [1] + [0] * n
        for c in coins:
            for sm in range(c, n + 1):
                dp[sm] = (dp[sm] + dp[sm - c]) % MOD
        return dp[n]

大家可以在下面这些地方找到我~😊

我的 GitHub

我的 Leetcode

我的 CSDN

我的知乎专栏

我的头条号

我的牛客网博客

我的公众号: 算法精选, 欢迎大家扫码关注~😊

算法精选 - 微信扫一扫关注我

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Bentley MicroStation V8i (SelectSeries 4) 08.11.09.833是一款功能强大的CAD软件,主要用于工程设计和建筑设计方面,支持2D和3D建模、渲染和动画等多种功能。其具有自动化工具、可自定义的界面、强大的图形编辑和处理能力、多种文件格式的支持等特点,可以帮助用户在设计过程中提高效率和准确性。此软件灵活便捷,使用范围广泛,不仅适用于建筑、土木工程、交通运输、水利工程等行业,还可以用于电力、制造业等其他领域。Bentley MicroStation V8i (SelectSeries 4) 08.11.09.833拥有丰富的功能模块,例如MicroStation Descartes可以支持地理空间和影像处理,而MicroStation PowerDraft可以用于绘图和草图设计等。这款软件还可以集成其他Bentley产品,如InRoads、GEOPAK、MX等,以扩展其功能和灵活性。总的来说,Bentley MicroStation V8i (SelectSeries 4) 08.11.09.833是一款功能强大且灵活多样的CAD软件,能够帮助用户快速高效地完成设计任务,是各行业专业人士不可或缺的工具之一。 ### 回答2: Bentley MicroStation V8i (SELECTseries 4) 08.11.09.833是一款用于CAD和GIS设计的软件。该软件具有强大的三维建模和2D绘图工具,可以用于建筑、土木工程、机械工程、电气工程等领域的设计和制图。它的设计界面简单易用,功能强大,可以轻松创建复杂的设计模型和项目。除此之外,该软件还支持多种文件格式的导入和导出,可以方便地与其他CAD软件进行兼容。此外,该软件还拥有灵活的协作工具和强大的云端支持,可方便团队合作。总体来说,Bentley MicroStation V8i (SELECTseries 4) 08.11.09.833是一款优秀的CAD和GIS设计软件,对于需要进行复杂项目设计和制图的专业人士来说,是非常有价值的工具。 ### 回答3: Bentley MicroStation V8i (SELECTseries 4) 08.11.09.833是Bentley公司推出的一个建筑设计软件,可以用于建筑、土木工程和电气设计等领域。这个软件在功能方面非常强大,可以进行3D建模、制图和渲染等操作,并且还支持多种文件格式的导入和导出。 在使用过程中,该软件提供了丰富的工具和功能,可以帮助用户高效地完成各种任务。其中包括高级的CAD绘图和编辑功能、多样化的标注和尺寸控制、灵活的图层管理和复杂线型设置等。 除此之外,该软件还具有强大的工作流程管理功能,可以帮助用户更好地协作和组织项目。例如,它提供了定制化的自动化工具,可以快速生成标准的设计图件,并支持多用户同时协作同一项目。 总之,Bentley MicroStation V8i (SELECTseries 4) 08.11.09.833是一款功能强大、易于使用的建筑设计软件,为用户提供了综合性的设计解决方案,可以满足各种不同领域的设计需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值