主要用指针来操作的,避免有相同的结果占用内存
contexts是数组 ['01','02','03','04','05','06']
两数一组
调用calCombination2(contexts)
calCombination2(contexts,k=0,arr=[]){
for(var i=0;i<contexts.length;i++){
if(contexts[k]!==contexts[i]){
if(k==0){arr.push(contexts[k]+contexts[i])}
if(k!==0){
if(i>k){arr.push(contexts[k]+contexts[i])}
}
}
}
if(k<contexts.length-1){
return calCombination2(contexts,k=k+1,arr)
}else{
return arr
}
},
三数一组
调用calCombination3(contexts)
calCombination3(contexts,k=0,arr=[]){
for(var i=0;i<contexts.length;i++){
if(contexts[k]!==contexts[i] ){
if(k==0){
for(var j=1 ;j<contexts.length-i;j++){
arr.push(contexts[k]+contexts[i]+contexts[i+j])
}
}
if(k!==0){
if(i>k){
for(var j=1 ;j<contexts.length-i;j++){
arr.push(contexts[k]+contexts[i]+contexts[i+j])
}
}
}
}
}
if(k<contexts.length-1){
return calCombination3(contexts,k=k+1,arr)
}else{
return arr
}
},
四数一组
调用calCombination4(contexts)
calCombination4(contexts,k=0,arr=[]){
for(var i=0;i<contexts.length;i++){
if(contexts[k]!==contexts[i]){
if(k==0){
for(var j=1 ;j<contexts.length-i;j++){
for(var h=2 ;h<contexts.length-i;h++){
if(h>j){
arr.push(contexts[k]+contexts[i]+contexts[i+j]+contexts[i+h])
}
}
}
}
if(k!==0){
if(i>k){
for(var j=1 ;j<contexts.length-i;j++){
for(var h=2 ;h<contexts.length-i;h++){
if(h>j){
arr.push(contexts[k]+contexts[i]+contexts[i+j]+contexts[i+h])
}
}
}
}
}
}
}
if(k<contexts.length-1){
return this.calCombination4(contexts,k=k+1,arr)
}else{
return arr
}
},
返回结果