编辑代码


// 加法分解

// 【问题描述】 
// 给一个正整数n,输出它所有的正整数加法的分解方法。  
// 注意:
// 1. 根据输入的要求决定交换加数的位置是否视为不同的分解方案。 
// 2. 不分解也视为一种分解方案。  
// 3. 按字典序输出所有分解方案,格式见样例。

// 【输入格式】
// 输入共1行,包含2个正整数n和m,之间用一个空格隔开。
// n表示待分解正整数,
// m是1或者2:
// 1表示交换加数的位置视为不同的分解方案
// 2表示交换加数的位置视为相同的分解方案。


function findSum(target, type) {
    let res = []
    const path = []
    backtracking(target, 1)
    function backtracking(cur, starIndex) {
        // 递归的结束条件
        if (cur === 0) {
            res.push([...path]) // 解除引用,存放结果
            return;
        }

        for (let i = starIndex; i <= cur; i++) {
            path.push(i)
            if (type === 2) {
                backtracking(cur - i, i); // 下一层递归的结束位置
            } else {
                backtracking(cur - i, 1);// 下一层递归的结束位置
            }
            path.pop()
        }
    }
    return res
}
function myPrint(arr) {
    for (let i in arr) {
        let str = '5=';
        for (let j in arr[i]) {
            if (j == arr[i].length - 1) {
                str += arr[i][j];
            } else {
                str += arr[i][j] + '+';
            }
        }
        console.log(str);
    }
}

myPrint(findSum(5, 1))
console.log("-------------------")
myPrint(findSum(5, 2))