我的头与我并不相信,希望有人可以帮助......
我们说我有:
1234567
我希望生成所有可能组合的列表,唯一的限制是:
所以,像这样:
1
2
3
4
5
6
7
12
13
14
15
16
17
123
1234
12345
123456
1234567
134
1345
...
答案 0 :(得分:4)
这是一个递归算法,它假设一个范围:
function ranges(from,to,soFar){
console.log(soFar);
if(from === to){
return;
}
for(var i = from + 1;i <= to;i++){
ranges(i,to,soFar+i); // append any number that's still possible
}
}
用法为ranges(0,7,"")
。
在每个阶段:
答案 1 :(得分:1)
@Benjamin Gruenbaum很棒的解决方案。也很快。即使我之前使用过这样的递归,我仍然缺乏算法知识。希望你不要介意我修改你的代码以产生一个二维数组来提供某种排序结果:
var results = [];
function ranges(from,to,soFar){
if(soFar != ''){
if(!results[soFar.length]){
results[soFar.length] = [];
}
results[soFar.length].push(soFar);
}
if(from === to){
return;
}
for(var i = from + 1;i <= to;i++){
ranges(i,to,soFar+i); // append any number that's still possible
}
}
ranges(0, 4, '');
console.log(results);
如果你有更好的方法,请告诉你。
如果你想要你的结果&#34;打印&#34;出来,这样做:
for(var i = 1; l = results.length, i < l; i++)
{
console.log(results[i].join('\n'));
}
将'\n'
替换为<br/>
以获取HTML。控制台日志仅用于审核目的。