列出1、2和3加起来可以等于4的所有方式,顺序很重要.例如,[1, 1, 1, 1]
是单向的.[1,1,2]
不同于[1,2,1]
我已经想出了一种在纸面上有效的方法.但我还是不能为它写代码.请帮帮忙,请看这张My Idea分的照片,以求清晰.
我写的这个代码失败了.但这就是我所能做的.
function theseAddToSum(steps = [], sum) {
let results = [];
if (steps.length < 1) return 'error'
for (let i = 0; i < steps.length; i++) {
let cur = steps[i];
let remaining = sum - cur;
if (remaining >= 0) {
console.log('sum', sum, 'step', cur)
let c = theseAddToSum(steps, remaining)
}
}
return results
}
console.log(theseAddToSum([1, 2, 3], 4))
当我console.log('sum', sum, 'step', cur)
岁时,我得到了想要的结果:
sum 4 step 1
sum 3 step 1
sum 2 step 1
sum 1 step 1
sum 2 step 2
sum 3 step 2
sum 1 step 1
sum 3 step 3
sum 4 step 2
sum 2 step 1
sum 1 step 1
sum 2 step 2
sum 4 step 3
sum 1 step 1
我的问题是,我不知道如何将结果推送到results
array.它应该看起来像[[1,1,1,1], [1,1,2], [1,2,1], [1,3], [2,1,1], and on]