数字数组的全排列(js)

/** 传入一个数组参数(数组里面的数字互不相同),返回数组数字全排列的所有情况的数组
*思路:从数组的数字里面选一个,放在第一项,剩下的数字递归全排
*没考虑去重的问题
*
**/
function fullSort(arr){
    var result = [];
    if (arr.length == 1) {
        result.push(arr);
        return result;
    }
    for (var i = 0; i < arr.length; i++) {
        var temp = []; 
        temp.push(arr[i]); //取任意一项放到temp的第一项
        var remain = arr.slice(0);//深复制原数组到remain
        remain.splice(i,1); //去掉那一项
        var temp2 = fullSort(remain).concat(); //剩下的项全排列,返回[[1,2],[1,3]]这样的数据
        for (var j = 0; j < temp2.length; j++) {
            temp2[j].unshift(temp[0]); // [[5,1,2],[5,1,3]]这样的数据
            result.push(temp2[j]);
        }
    }
    return result;
}

for (var i = 0, arr = fullSort([1,2,2,3,5]); i < arr.length; i++) {
    console.log(arr[i]);
}

别人的代码= =

function swap(arr,i,j) { 
    if(i!=j) {          
        var temp=arr[i]; 
        arr[i]=arr[j]; 
        arr[j]=temp; 
    } 
} 
var count=0; 
function show(arr) { 
    document.write("P<sub>"+ ++count+"</sub>: "+arr+"<br />"); 
} 
//此方法最主要是交换的思路
function perm(arr) {   
     (function fn(n) { //为第n个位置选择元素 
        for(var i=n;i<arr.length;i++) { 
            swap(arr,i,n); 
             if(n+1<arr.length-1) //根据下标a(b+1) 不是最后一项,判断数组中剩余的待全排列的元素是否大于1个 
                 fn(n+1); //从第n+1个下标进行全排列 
             else
                 show(arr); //显示一组结果 
             swap(arr,i,n); 
         } 
     })(0); 
 } 
 perm(["e1","e2","e3"]); 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值