首页 > 编程语言 > 详细

【每日一题】数组全排列

时间:2021-09-05 20:18:41      阅读:13      评论:0      收藏:0      [点我收藏+]
/**
 * 描述:求一个无重复数组的全排列数组,类似数学中的排列组合
 * 解题思路:递归调用,第一个数的情况是C1/n 第二个数是C1/n-1...
 * @param {剩余数组} surplusArr 
 * @param {当前数组} curentArr 
 * @param {全部数据} allArr 
 * @returns 
 */
function doCombinationCallback (surplusArr, curentArr = [], allArr = []) {
  if (surplusArr && surplusArr.length === 0) {
    allArr.push(curentArr)
  }

  for (let i = 0; i < surplusArr.length; i++) {
    let otherArr = surplusArr.filter((item, index) => index !== i)
    let curArr = [...curentArr, surplusArr[i]]
    doCombinationCallback(otherArr, curArr, allArr)
  }

  return allArr
}

console.log(doCombinationCallback([1, 2, 3, 4]))
结果
[
  [ 1, 2, 3, 4 ], [ 1, 2, 4, 3 ],
  [ 1, 3, 2, 4 ], [ 1, 3, 4, 2 ],
  [ 1, 4, 2, 3 ], [ 1, 4, 3, 2 ],
  [ 2, 1, 3, 4 ], [ 2, 1, 4, 3 ],
  [ 2, 3, 1, 4 ], [ 2, 3, 4, 1 ],
  [ 2, 4, 1, 3 ], [ 2, 4, 3, 1 ],
  [ 3, 1, 2, 4 ], [ 3, 1, 4, 2 ],
  [ 3, 2, 1, 4 ], [ 3, 2, 4, 1 ],
  [ 3, 4, 1, 2 ], [ 3, 4, 2, 1 ],
  [ 4, 1, 2, 3 ], [ 4, 1, 3, 2 ],
  [ 4, 2, 1, 3 ], [ 4, 2, 3, 1 ],
  [ 4, 3, 1, 2 ], [ 4, 3, 2, 1 ]
]

【每日一题】数组全排列

原文:https://www.cnblogs.com/chinesedon/p/15226500.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!