由于在面试中碰到了,而且很尴尬的没搞出来,这里记录一下
后来我回去想了一下,其实思路到时蛮简单的,比如我们有数组
var arr=[1,2,3,4,5];
我要求C35,那么组合形式为
- 123
- 124
- 125
- 234
- 235
- 345
形如上面的排列内容,我们可以换一种理解方式,我们把数组中全部替换为1或者零,那么上述组合就变成了下面的内容
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5
获取上述数组函数
function getCombine(m,n){
var arr=[];
var reseultArr=[];
for(var i=0;i<m;i++){
var val=i<n?1:0;
arr.push(val);
}
reseultArr.push(arr.slice(0));
while(arr.slice(-n).indexOf(0)!=-1){
var l=0;
for(i=0;i<m;i++){
if(arr[i]==1&&arr[i+1]==0){
for(var j=0;j<i;j++){
arr[j]=j<l?1:0;
}
arr[i]=0;
arr[i+1]=1;
reseultArr.push(arr.slice(0));
break;
}
arr[i]==1&&l++;
}
}
return reseultArr;
}