26 lines
812 B
JavaScript
26 lines
812 B
JavaScript
function combinations(arr, k){
|
|
var i,
|
|
subI,
|
|
ret = [],
|
|
sub,
|
|
next;
|
|
for(i = 0; i < arr.length; i++){
|
|
if(k === 1){
|
|
ret.push( [ arr[i] ] );
|
|
}else{
|
|
sub = combinations(arr.slice(i+1, arr.length), k-1);
|
|
for(subI = 0; subI < sub.length; subI++ ){
|
|
next = sub[subI];
|
|
next.unshift(arr[i]);
|
|
ret.push( next );
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
combinations([0,1,2,3,4], 3);
|
|
// produces: [[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
|
|
|
|
combinations(["Crosby", "Stills", "Nash", "Young"], 3);
|
|
// produces: [["Crosby", "Stills", "Nash"], ["Crosby", "Stills", "Young"], ["Crosby", "Nash", "Young"], ["Stills", "Nash", "Young"]]
|