簡體   English   中英

Javascript:打印所有可能的排列以獲得總和

[英]Javascript: printing all possible permutations to get sum

我正在嘗試運行一段代碼,但被卡住了。 我有一個數組大小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]-不知道出了什么問題。 提前致謝。

編輯:我的問題顯示了我的代碼,但我想了解的是為此的偽代碼。 我缺少了什么,我也不知道

遞歸深度優先搜索是此類任務的最佳選擇。 通用代碼(任何大小,任何目標):

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM