之前文章中谈过排列组合算法,主要事递归,代码如下
const arrangeCombination = arr => {
const res = [], len = arr.length, inner = ary => {
for (let i = 0; i < len; i++) {
let notHas = !ary.includes(arr[i]), tmp = [...ary, arr[i]];
if (ary.length === len - 1) {
notHas && res.push(tmp)
continue
}
notHas && inner(tmp);
}
}
inner([]);
return res;
}
例如输入[1,2,3],
输出:[[ 1, 2, 3 ],[ 1, 3, 2 ],[ 2, 1, 3 ],[ 2, 3, 1 ],[ 3, 1, 2 ],[ 3, 2, 1 ]]。
不过只能解决无重复数的排序问题。
这几天稍作研究,尝试解决出了无重复数的排序,下面直接上代码
const arrangeCombinationRepeat = arr => {
const res = [], len = arr.length,
//保证两个数组中所有数所出现次数一致
arrCompare = (a, b) => {
const c = arr => arr.reduce((pre, cur) =