JavaScript 从一个数组中拿出N个数(可放回),问共有多少种

今天在写一道leetcode的时候遇到了无重复放回的遍历问题,用递归解决如下:
 
function p(arr, N, ans){
  if(N === 0) return ans;
  if(ans.length === 0) return(p(arr, N-1, arr.slice(0)))
  
  let res = []
  for(let c = 0; c < arr.length; c++){
    let item = arr[c];
    ans.forEach(element => {
      let el = element + item;
      res.push(el)
    });
  }
      
  return p(arr, N-1, res)
 }

console.log(p(['1', '2'], 4, []))  // 输出为
[
  '1111', '2111', '1211',
  '2211', '1121', '2121',
  '1221', '2221', '1112',
  '2112', '1212', '2212',
  '1122', '2122', '1222',
  '2222'
]
posted @ 2020-03-21 21:30  尽黑不白  阅读(282)  评论(0)    收藏  举报