数组组合算法

递归实现组合算法:

假设有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;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容