程序员面试金典08.11_go_硬币
题目硬币 。 给定数量不限的硬币 , 币值为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、动态规划;时间复杂度O(n) , 空间复杂度O(n)
func waysToChange(n int) int { coins := []int{1, 5, 10, 25} dp := make([][]int, 5) for i := 0; i <= 4; i++ {dp[i] = make([]int, n+1)dp[i][0] = 1 // 金额为0的情况 , 只有都不选 , 组合情况为1 } for i := 1; i <= 4; i++ {for j := 1; j <= n; j++ {if j-coins[i-1] >= 0 {dp[i][j] = dp[i-1][j] + dp[i][j-coins[i-1]]} else {dp[i][j] = dp[i-1][j]}} } return dp[4][n] % 1000000007}2、动态规划;时间复杂度O(n) , 空间复杂度O(n)
文章插图
func waysToChange(n int) int { coins := []int{1, 5, 10, 25} dp := make([]int, n+1) dp[0] = 1 for i := 1; i <= 4; i++ {for j := 1; j <= n; j++ {if j-coins[i-1] >= 0 {dp[j] = dp[j] + dp[j-coins[i-1]]}} } return dp[n] % 1000000007}总结Medium题目 , 零钱类问题 , 使用动态规划
相似的题目还有:
leetcode 322.零钱兑换
【程序员面试金典08.11_go_硬币】leetcode 518.零钱兑换II
- 程序员为教师妻子开发应用:将iPhone变成文档摄像头
- 悔哭!一程序员误把7500个比特币当垃圾扔掉,估算约2.4亿美元
- 2.4亿美元打水漂!程序员小哥把7500个比特币当垃圾扔掉 硬盘找不回
- 程序员开发抢茅台脚本:2天就刷榜Github
- 为什么我喜欢C语言,却非常讨厌C++?一位国外程序员的回答
- 程序员怎么保护头发?雷军回应
- 北美程序员Tinder翻车实录
- 导航|攻坚“卫星导航信号弱”难题,高德程序员联手武大学子夺得国际室内定位大赛冠军
- 长沙|视频|聚焦“数字英雄”长沙银行冠名全国首档程序员电视真人秀
- 孙玲|从流水线女工逆袭成高薪程序员 一度爆红的她现在咋样了?
