数组去重全排列解法

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

已知数组[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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容