122.硬币
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/coin-lcci
题目描述
硬币。给定数量不限的硬币,币值为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
关键技术
动态规划
题目分析
- 新建数组dp,dp[j]表示组成j元需要最少的硬币数;
- 状态转移方程:dp[j] = dp[j] + dp[j-coin[i]];
- 注意:对1000000007取模。
/** * @param {number} n * @return {number} */ var waysToChange = function(n) { let coin = [1, 5, 10, 25]; let dp = new Array(n+1).fill(1); for(let i=1; i<4; i++){ for(let j=1; j<=n; j++){ if(j - coin[i] >= 0){ dp[j] = (dp[j] + dp[j-coin[i]]) % 1000000007; } } } return dp[n]; };