全排列与全组合

//全排列
var arr = ["a", "b", "c", "d"];
//实现全排列
function AllPermuAndCombi(arr,length){
        var Allresult=[];
           for(var i=1;i<=length;i++){
             Allresult=Allresult.concat(mainFunction(arr,i));

}
     return Allresult;
}
function mainFunction(Arr, num) {
         var resultArr = [],
            resultNum = 0,
                     iNow = 1;
              if(num == 1) {
               return Arr;
                }
        function PermuAndCombina(arr, iNow, str) {

                 for(var i = 0; i < arr.length; i++) {
                        var result = arr.concat();
                        var strClone = str;
                        strClone += result.splice(i, 1);
                         if(iNow == num) {
                             resultNum += result.length;
                              for(var j = 0; j < result.length; j++) {
                                        resultArr.push(strClone + result[j]);
                                }
                          } else {
                               PermuAndCombina(result,iNow+1, strClone);
                          }
                 }

       }
//组合,涉及的是数组去重
function unique(arr){
      for (var i=0;i<arr.length;i++) {
            arr[i]=arr[i].split("").sort().join("");
        }
       var result=[];
        var obj={};
      for (var i = 0; i < arrength; i++) {
             if (!obj[arr[i]]) {
                    result.push(arr[i]);
                      obj[arr[i]]=1;
                 }
        }

      return result;
}
       PermuAndCombina(Arr,iNow+1, "");
// resultArr.push(resultNum);
//resultArr=unique(resultArr)
         return resultArr;
}
console.log(mainFunction(arr,2));
console.log(AllPermuAndCombi(arr,3));
//组合
var Arr_un=[1,5,3,1,7,3];
//数组去重
function Array_unique(Arr){
var result=[];
var Obj={};
for (var i=0;i<Arr.length;i++) {
if (!Obj[Arr[i]]) {
result.push(Arr[i]);
Obj[Arr[i]]=1;
}
}
return result;
}
console.log(Array_unique(Arr_un));

转载于:https://www.cnblogs.com/laiso/p/8597686.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值