我正在尝试运行一段代码但却陷入困境。
我有一个大小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] - 不知道出了什么问题。提前谢谢。
编辑:我的问题显示了我的代码,但我想要了解的是伪代码。我错过了什么,我不知道是什么
答案 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);