// 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可以繼續(xù)分解, 然后 3+ 3, 其中 3可以繼續(xù)分解, 到這里就不在分解,因?yàn)闀?huì)重復(fù), 所以6的分解就變成了"1的所有分解集合每個(gè)加上5, 2的所有分解集合加上4, 3的所有分解集合加上3". 注意一點(diǎn),數(shù)據(jù)排序一定是從大到小排列,
2021.10.25
太菜了,寫了那么長時(shí)間,耗了大半年時(shí)間,還特意寫了一篇文章鞏固印象,結(jié)果幾個(gè)月后還是卡住了,