Javascript 无排序的组合算法()
我需要从123开始的结果,如下所示。我想从头开始打印,不使用Javascript 无排序的组合算法(),javascript,sorting,recursion,combinations,Javascript,Sorting,Recursion,Combinations,我需要从123开始的结果,如下所示。我想从头开始打印,不使用sort() 1 2 3 1 2 4 1.25 ..… 356 4 5 6 但是,结果如下所示 4.56 356 2.56 1.56 346 2.4.6 14.6 2 3 6 1 3 6 1 2 6 34.5 2.4.5 14.5 23.5 1 3 5 1.25 2 3 4 1 3 4 1 2 4 1 2 3 result=”“; var N=6; var M=3; var arr=新阵列(M); 组合(N,M,arr,M); 警报(结
sort()
1 2 31 2 4
1.25
..…
356
4 5 6 但是,结果如下所示 4.56
356
2.56
1.56
346
2.4.6
14.6
2 3 6
1 3 6
1 2 6
34.5
2.4.5
14.5
23.5
1 3 5
1.25
2 3 4
1 3 4
1 2 4
1 2 3
result=”“;
var N=6;
var M=3;
var arr=新阵列(M);
组合(N,M,arr,M);
警报(结果);
功能组合(n、r、arr、sz){
var i=n+1;
while(i-->r){
//选择第一个元素
arr[r-1]=i;
if(r>1){//if仍然需要选择
//递归成小问题
组合(i-1、r-1、arr、sz);
}否则{
//打印出一个解决方案
var j=-1;
而(++j
除了全部反转之外,您可以从一开始迭代,直到想要的值
函数组合(n,r){
功能iter(i、temp){
如果(temp.length==r){//设置完成
result.push(临时联接(“”));//联接值
返回;
}
如果(i+r>n+1+temp.length){//提前退出
返回;
}
iter(i+1,温度concat(i));//取值
iter(i+1,temp);//不使用该值
}
var result=[];//结果集
iter(1,[]);//从1和
返回结果;//收集集的空数组
}
控制台日志(组合(6,3))代码>
。作为控制台包装{max height:100%!important;top:0;}
您可以通过以下方式更改代码来恢复顺序:
function combi(n, r, arr, sz) {
var i = r - 1;
while (i++ < n) {
// choose the first element
arr[r - 1] = i;
if (r > 1) { // if still needs to choose
// recursive into smaller problem
combi(i - 1, r - 1, arr, sz);
} else {
// print out one solution
var j = -1;
while (++j < sz) {
result += arr[j] + " ";
}
result += "\n";
}
}
}
功能组合(n、r、arr、sz){
var i=r-1;
while(i++1){//if仍然需要选择
//递归成小问题
组合(i-1、r-1、arr、sz);
}否则{
//打印出一个解决方案
var j=-1;
而(++j
看来你的想法与你想要的正好相反,所以这可能意味着你需要改变某些东西……哇,~~谢谢你。我现在很高兴。你的源代码对我很有帮助…~!!::)哇,非常感谢:)
function combi(n, r, arr, sz) {
var i = r - 1;
while (i++ < n) {
// choose the first element
arr[r - 1] = i;
if (r > 1) { // if still needs to choose
// recursive into smaller problem
combi(i - 1, r - 1, arr, sz);
} else {
// print out one solution
var j = -1;
while (++j < sz) {
result += arr[j] + " ";
}
result += "\n";
}
}
}