递归实现组合算法:
假设有m个不一样的球,需要从中取出n个,问有多少种取法?面对这个问题的时候,递归算法处理该问题是一种思路。
1、将球按照顺序放好,依次取出,并将球后面的球组作为数组,继续递归,如A,B,C,D,E,可得到如下几种情况 { A,[B,C,D,E]} ,{ B,[C,D,E]},{ C,[D,E]}以及{ D,[E]}等4中情况。
2、将剩余数组继续递归如[B,C,D,E] 递归得到 {B,[C,D,E]},{C,[D,E]},{D,[E]}等3种情况。
3,将索取的第一个数累计,若数量为n-1,则停止递归,并将数据将球遍历组合。
4、将所有组合合并便得到组合结果。
相关实现代码如下:
const threeSumClosest = (nums, target) => {
let res = [];
const main = (arr, oneResult) => {
if (oneResult.length === target - 1) {
if(arr.length > 0){
for (let j = 0; j < arr.length; j++) {
tmp = [...oneResult];
tmp.push(arr[j]);
res.push(tmp);
}
}
} else {
for (let i = 0; i <arr.length; i++) {
let tmpArr = arr.slice(i + 1);
let tmpOneResult = [...oneResult];
tmpOneResult.push(arr[i]);
main(tmpArr, tmpOneResult);
}
}
};
main(nums,[]);
return res;
}