俗话说“要想代码写得好,算法思想不能少”,作为程序员有空了多看看算法肯定不吃亏,记录下自己学习算法处理全排列问题的方法。
已知数组[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)