硬币。给定数量不限的硬币,币值为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
本题可使用动态规划或数学解法求解,以动态规划为例。
/**
* @param {number} n
* @return {number}
*/
let waysToChange = (n) => {
let dp = new Array(n + 1).fill(1)
let coins = [1, 5, 10, 25]
for (let i = 1; i < 4; i++) {
for (let j = 1; j <= n; j++) {
if (j - coins[i] >= 0) {
dp[j] = (dp[j] + dp[j - coins[i]]) % (1e9 + 7)
}
}
}
return dp[n]
};
a.b.c.d
比 a['b']['c']['d']
性能高点,后者还要考虑 [ ]
中是变量的情况
再者,从两种形式的结构来看,显然编译器解析前者要比后者容易些,自然也就快一点。
总之,在项目中,尽量将对象中的属性结构使用, 示例
const obj = {name: 'walker', age: 10}
function test() {
const {name, age} = obj
console.log(name)
console.log(age)
}
[1]
面试题 08.11. 硬币: https://leetcode-cn.com/problems/coin-lcci/
本文分享自 JavaScript全栈 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!