到n = 3时可以看出全排列有以下规律

固定第一个元素,将剩下的元素进行全排列处理; 将第一个元素与依次与第i(1<i<=arr.length)个元素互换,将剩下的元素进行全排列处理; 结束 很适合使用递归解决。只要写一个全排列函数permutation,能固定一个下标为i的元素,剩下元素再进行全排列即可。

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;
}

上次更新:
贡献者: 郑壮