21,886
社区成员
发帖
与我相关
我的任务
分享
function combo(m,n){
var arr=[],sumArr=[],str,isBreak=false;
for(var i=0;i <m;i++){
arr.push(0);
}
for(var i=0;i <n;i++){
arr[i]=1;
}
str=arr.join('');
while(1){
var itemArr=[],
reg=/(.*?)(10)/;
for(var j=0,len=str.length;j <len;j++){
str.charAt(j)!="0"&&itemArr.push(j);
}
sumArr.push(itemArr);
if(reg.test(str)){
str=str.replace(reg,function(l,s1,s2){
var num=s1.replace(/0/g,"").length,
prefixstr="";
for(var i=0,len=s1.length;i <len;i++){
prefixstr+=(i <num?'1':'0');
}
return prefixstr+"01";
});
}else{
break;
}
}
return sumArr;
}
function doubleCombo(arr,n){
var arrLen=arr.length,finalArr=[];
if(arrLen <n) {
alert("invalid input!");
return;
}
var comboCol=combo(arrLen,n);//行序号组合数
for(var i=0,cl=comboCol.length;i <cl;i++){//得到组合的每一项
var colItem=comboCol[i],items=[[]];
for(var j=0,il=colItem.length;j <il;j++){
var data=arr[colItem[j]];
if(typeof data=="number"){
for(var k=0,itemsLen=items.length;k <itemsLen;k++){
items[k].push(data);
}
}
else{
var mitems=[];
for(var m=0;m <items.length;m++){
for(var n=0;n <data.length;n++){
var mitem=items[m].concat([]);
mitem.push(data[n]);
mitems.push(mitem);
//console.log(mitem);
//console.log(mitems);
}
}
items=mitems;
}
}
finalArr=finalArr.concat(items);
}
return finalArr;
}
//下面是调用和结果显示
var t=doubleCombo([32,[24,34,43,44,46,47],35,36,42],3)
for(var k=0,l=t.length;k <l;k++){
var a=t[k];
for(var j=0,l2=a.length;j <l2;j++)
document.write(a[j]+' ');
document.write(' <br/>');
}