前端算法面试题之 - 排列组合
求数组的排列组合
排列
let data = ['a','b','c','d']; // 全排列 function allSort(arr, index = 0, group = []){ if(index == arr.length) return group; let temp = []; temp.push(arr[index]); for(let i = 0; i < group.length; i++) { temp.push(group[i] + arr[index]) temp.push(arr[index] + group[i]) } group = [...group, ...temp] return allSort(arr, index+1, group) }
console.log(allSort(data))
- 全组合
let data = ['a','b','c','d'];
// 全组合 function all(arr, index = 0, group = []) {
if(index == arr.length) return group;
let temp = [];
temp.push(arr[index]);
for(let i = 0; i < group.length; i++) {
temp.push(group[i] + arr[index])
}
group = [...group, ...temp]
return all(arr, index+1, group)
} console.log(all(data))
- 数组随机组合
var arr = [1,3,4,6,7]; var result = [];
function pick(arr, beginIndex = 0, needCount = 3, subResult = []){ if(needCount == 0) { result.push(subResult) return; } for(var i = beginIndex; i< arr.length; i++) { var num = arr[i]; var temp = [...subResult, num] pick(arr,i+1, needCount-1, temp) } }
pick(arr) console.log(result)
- 求二维数组的每个子元素选一个组成的组合
let arr = [['a','b'],['1','2'],['m','n']];
// 组合 function comb(arr) { let resultArr = [];
function get(array, index = 0, subArr = []) {
if(!array[index]) {
resultArr.push(subArr.join(''));
return;
};
array[index].forEach((v, i) => {
get(array, index + 1, index === 0 ? [v] : [...subArr,v])
})
}
get(arr);
return resultArr;
}
```