面试题 之 全排列

注意一下数组的复制  newArr = arr 这样是不行的 此时newArr还是指向的是arr这个数组  他们是相等的  

可以使用 concat  slice 来创建新数组

var arr = [1, 2, 3, 4];
var head = [];

function fullAZ(arr) {
    if(arr.length < 2) return;
    if (arr.length == 2) {
        console.log(head + '-' + arr[0] + '-' + arr[1]);
        console.log(head + '-' + arr[1] + '-' + arr[0]);
    } else if(arr.length > 2){
        var i;
        for (i = 0; i < arr.length; i++) {
            var lastArr = arr.slice(); //数组复制  否则对lastArr上的操作直接作用到arr
            head.push(arr[i]);
            lastArr.splice(i, 1);
            fullAZ(lastArr);
            head.pop();
        }
    }
}
fullAZ(arr);

 

posted @ 2015-04-01 14:43  cart55free99  阅读(138)  评论(0编辑  收藏  举报