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