问题
有砝码 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()
}
}