堆';s算法-JavaScript

堆';s算法-JavaScript,javascript,Javascript,我对Heap算法的工作原理有很好的理解,但我不知道如何将每个唯一排列添加到数组中,并根据算法的递归性质返回它 为什么它只添加相同的排列,而控制台日志打印出不同的排列 var swap=function(数组、pos1、pos2){ var-temp=数组[pos1]; 数组[pos1]=数组[pos2]; 数组[pos2]=温度; }; var heappermute=函数(数组,n,结果=[])){ n=n | | array.length; 如果(n==1){ 结果:推送(阵列); con

我对Heap算法的工作原理有很好的理解,但我不知道如何将每个唯一排列添加到数组中,并根据算法的递归性质返回它

为什么它只添加相同的排列,而控制台日志打印出不同的排列

var swap=function(数组、pos1、pos2){
var-temp=数组[pos1];
数组[pos1]=数组[pos2];
数组[pos2]=温度;
};
var heappermute=函数(数组,n,结果=[])){
n=n | | array.length;
如果(n==1){
结果:推送(阵列);
console.log(数组);
}否则{

对于(var i=1;i,您需要添加数组的副本,而不是数组及其对象引用

results.push(array.slice());
//                ^^^^^^^^
var swap=function(数组、pos1、pos2){
var-temp=数组[pos1];
数组[pos1]=数组[pos2];
数组[pos2]=温度;
};
var heappermute=函数(数组,n,结果=[])){
n=n | | array.length;
如果(n==1){
results.push(array.slice());
}否则{
对于(var i=1;i a.join(“”));

.as console wrapper{max height:100%!important;top:0;}
当我推送数组与推送数组副本时会发生什么情况?如果推送数组,则会有一个对同一数组具有相同对象引用的数组。通过使用slice获取副本,可以获得独立的新数组。