0

我正在准备面试,并正在尝试使用 javascript 进行排列的堆算法。所以当我尝试打印到控制台时代码工作正常。

function per(a, size){
    if(size === 1){
        console.log(a);
    }

    for(let i = 0; i < size; i++){
        per(a, size-1;
        if(size % 2 === 1){
            let temp = a[0];
            a[0] = a[size - 1];
            a[size - 1] = temp;
        }else{
            let temp = a[i];
            a[0] = a[size -1];
            a[size - 1] = temp;
        }
    }
}
let a = [1,2,3];
per(a, a.length,count);
console.log(count);

但是当我尝试将结果放入数组时它不起作用。

function per(a, size){
    if(size === 1){
        count.push(a);
    }

    for(let i = 0; i < size; i++){
        per(a, size-1);
        if(size % 2 === 1){
            let temp = a[0];
            a[0] = a[size - 1];
            a[size - 1] = temp;
        }else{
            let temp = a[i];
            a[0] = a[size -1];
            a[size - 1] = temp;
        }
    }
}
let count = [];
let a = [1,2,3];
per(a, a.length,count);
console.log(count);

它打印这个:

[
  [ 3, 1, 1 ],
  [ 3, 1, 1 ],
  [ 3, 1, 1 ],
  [ 3, 1, 1 ],
  [ 3, 1, 1 ],
  [ 3, 1, 1 ]
]

4

1 回答 1

1
count.push(a.slice()); // push a shallow-copy of the array

顺便说一句,您不需要临时变量来交换两个项目。

[a[0], a[size-1]] = [a[size-1], a[0]];
于 2021-07-07T17:37:49.060 回答