Javascript:打印所有可能的排列以获得总和

时间:2015-12-22 21:14:02

标签: javascript

我正在尝试运行一段代码但却陷入困境。 我有一个大小var sizes = [1,2];的数组,我有一个我希望达到len = 3;的长度。我想用我给定的尺寸打印所有可能达到这个长度的可能性,即:[1,1,1],[2,1],[1,2]。

到目前为止我试过这个:

var sizes = [1,2];  // possible sizes to pick
var start_len = 3;  // length I want to reach
var arr = [];

var main = function(len){
    if(len == 0){arr = [];}  //clear the array after I got to full length
    if(len >= 1){            // try adding 1
        B(1,len, arr);
    }
    if(len >= 2){            // try adding 2
        B(2,len, arr);
    }
}
var add_and_call_again= function(elem, len, arr){
    arr.push(elem);
    if(len-elem == 0){    // if got to full length
        console.log(arr);
    }
    main(len-elem);       // add next element with less length to fill
}    
main(start_len);

我得到的是[1,1,1]和[2,1],还有[2] - 不知道出了什么问题。提前谢谢。

编辑:我的问题显示了我的代码,但我想要了解的是伪代码。我错过了什么,我不知道是什么

1 个答案:

答案 0 :(得分:1)

递归深度优先搜索是此类任务的最佳选择。通用代码(任何尺寸,任何目标):

var sizes = [1, 2];  // possible sizes to pick
var start_len = 3;

function dfs(current_len, path){
    var res = [];
    sizes.forEach(function(s){
        var temp_res;
        if (s==current_len)
            res.push(path.concat([s]));
        else if (s<current_len)
            temp_res = dfs(current_len-s, path.concat([s]));
        if (temp_res)
            res = res.concat(temp_res);
    });
    if (res.length)
        return res;
 }

 var paths = dfs(start_len, []);
 console.log(paths);