一道算法题,请教一下
資深大佬 : salamanderMH 1
问题
有砝码 1g,2g,3g…100g,组成 100g 的重量有几种方式?
这道题应该可以用动态规划做,但一下子没想出来(太渣了) 写了一个回溯的算法,但效率太差了:
function counterweightWays(currentNum, allNum, leftWeight, tmpResult, result) { if (currentNum > allNum) { return } if (leftWeight == 0) { result.push(Array.from(tmpResult)) return } const maxNum = Math.floor(leftWeight / currentNum) for (let n = maxNum; n >= 0; n--) { tmpResult.push(n) counterweightWays(currentNum + 1, allNum, leftWeight - n * currentNum, tmpResult, result) tmpResult.pop() } }
大佬有話說 (5)