求助JS二维数组从N个项取M个进行排列的组合算法函数

求助JS二维数组从N个项取M个进行排列的组合算法函数
如数组:arr1=[[1,2,3],[3,6],4,6,[3,4]];取4项的排列组合为
1、[[1,2,3],4,6,[3,4]]
2、[[1,2,3],[3,6],6,[3,4]]
3、[[1,2,3],[3,6],4,[3,4]]
4、[[1,2,3],[3,6],4,6]
5、[[3,6],4,6,[3,4]]
五种结果,其中m=5,n=4.
要求m,n为随机的,返回值的结果为以上五种结果组成的数组,即return arr2=[[[1,2,3],4,6,[3,4]],[[1,2,3],[3,6],6,[3,4]],[[1,2,3],[3,6],4,[3,4]],[[1,2,3],[3,6],4,6],[[3,6],4,6,[3,4]]];
chentao63 1年前 已收到1个回答 举报

byy88251302 春芽

共回答了21个问题采纳率:90.5% 举报

var arr1 = [];//你的原始数组
function getArr(m,n){
var rt = [];
for(var i=0;ivar arr = arr1.concat();
arr.splice(i,1);
getNext(arr,n-1);
}
return rt;
function getNext(arr,n){
if(!n){
return rt.push(arr);
}
for(var i=0;arr[i];i++){
var _arr = arr.concat();
_arr.splice(i,1);
getNext(_arr,n-1);
}
}
}
getArr(arr1.length,arr1.length - (arr1.length * Math.random() | 0));//这个也是随机的 m应该就是arr1数组的长度 n要说才是真正随机第二个参数实际是m-n

1年前 追问

9

chentao63 举报

好像不行啊 var arr=[[1,2,3],[3,6],4,6,[3,4]]; var arr2=getArr(arr.length,2); //alert(arr2[0].length); //alert(arr2[0][0].length) alert(arr2.length);//输出为0,正常的C(5,2)应该是10啊

举报 byy88251302

arr1=[[1,2,3],[3,6],4,6,[3,4]]; 你题目是arr1 我里面提到的是arr1 你现在用arr肯定不行

chentao63 举报

因为新手, 刚才无看清,不好意思,还有以下问题麻烦解决一下 arr1=[[1,2,3],[3,6],4,6,[3,4]]; var arr2=getArr(arr1.length,3); alert(arr2[.length) //输出60,应该C(5,3)=C(5,2)=10,不需要排序的

举报 byy88251302

arr1=[[1,2,3],[3,6],4,6,[3,4]];
function getArr(m,n){
var rt = [];
for(var i=0;i getNext([i],n-1,i+1);
}
for(var i=0,row;row = rt[i];i++){
var cell = [];
for(var j in row){
cell = cell.concat([arr1[row[j]]]);
}
rt[i] = cell;
}
return rt;
function getNext(arr,n,index){
if(!n){
return rt.push(arr);
}
for(var i=index;i getNext(arr.concat(i),n-1,i+1);
}
}
}
getArr(arr1.length,arr1.length * Math.random() | 0);

换个思路 就是你要的答案了、 请试用 好的话 请采纳

现在的n是选择的多少个

可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.020 s. - webmaster@yulucn.com