// 2 11
// 3 21 111
// 4 31 22 211 1111
// 5 41 32 311 221 2111 11111
// 6 51 42 411 33 321 3111 222 2211 21111 111111
function dd(n) { // 返回n的所有集合
if (n === 2) {
return [[1, 1]]
}
const arr = [];
for (let i = 1; i < n; i++) {
if (i <= n / 2) {
arr.push([n - i, i])
}
for (const each of dd(i)) {
if (num - i >= each[0]) {
arr.push([num-i, ...each])
}
}
}
return arr;
}
分析: 就是不断的分解过程, 拿6来举例, 6分解为5+1, 然后4 + 2, 其中2可以继续分解, 然后 3+ 3, 其中 3可以继续分解, 到这里就不在分解,因为会重复, 所以6的分解就变成了"1的所有分解集合每个加上5, 2的所有分解集合加上4, 3的所有分解集合加上3". 注意一点,数据排序一定是从大到小排列,
2021.10.25
太菜了,写了那么长时间,耗了大半年时间,还特意写了一篇文章巩固印象,结果几个月后还是卡住了,