数组去重全排列解法

2024-10-05
27 阅读

俗话说“要想代码写得好,算法思想不能少”,作为程序员有空了多看看算法肯定不吃亏,记录下自己学习算法处理全排列问题的方法。

已知数组[A,B,C,C],求数组全排列结果且不重复?

遇到这个问题首先让我回想起,当年学排列组合时,老师拿球球摆放的画面:

A,B,C先摆成ABC、BAC、CBA三种情况

以此类推ABC可继续摆成ABC和ACB两种情况,BAC可摆成BCA和BAC两种情况,CBA可摆成CBA和CAB两种情况,最终得出ABC全排列结果,那么用程序是如何实现这种思想呢?

var?permuteUnique?=?function(arr){

????var?res?=?[],

? ? ? ? i=0

????var?main?=?function(arr?,i){

? ? //递归到最后一位时将去重后的全排列情况保存

????if(i===arr.length){

? ? ? ? isExistArr(res,arr)?"":res.push(arr)

????}

????for(var j=i;j<arr.length;j++){

????????let?arr1?=?[...arr]

????????let?t?=?arr1[i]

????????arr1[i]?=?arr1[j]

????????arr1[j]?=?t

????????main(arr1,i+1)

????????}

????}

????main(arr,i)

????return?res

}

//去重

var?isExistArr?=?(arr,s)=>{

??var?len=arr.length

??var?compareStr?=?s.join("")

??for(var?i=0;i<len;i++){

??????var?itemStr?=?arr[i].join("")

??????if(itemStr?===?compareStr){

??????????return?true

??????}

??}

??return?false

}

var?nums?=?[1,2,3,4,4]

permuteUnique(nums)

分享至:
管理员

小草

专注人工智能、前沿科技领域报道,致力于为读者带来最新、最深度的科技资讯。

评论 (0)

当前用户头像