我试图了解这种动态编程算法的运行时间以及空间复杂度。此算法返回可以从面额列表中创建数字n的零钱总数。例如,如果denom is [25] and n is 100 the result is 1 as 25 * 4 = 100
。 m是记忆对象。
function f(n, denom, index,m,ad) {
var str = index + "-" +n
var val = denom[index]
var ways = 0;
if(m[str]){return m[str]}
if(index > denom.length - 1 && n == 0) {return 1}
for(var i = 0; i <= Math.floor(n/val); i++) {
ways += f(n - (i * val), denom, index + 1,m,ad)
}
m[str] = ways
return m[str];
}