簡體   English   中英

堆的算法 - JavaScript

[英]heap's algorithm - JavaScript

我對Heap的算法是如何工作有一個很好的理解,但我無法弄清楚如何將每個唯一的排列添加到一個數組中並根據算法的遞歸性質返回它。

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

 var swap = function (array, pos1, pos2) { var temp = array[pos1]; array[pos1] = array[pos2]; array[pos2] = temp; }; var heapsPermute = function (array, n, results = []) { n = n || array.length; if (n === 1) { results.push(array); console.log(array); } else { for (var i = 1; i <= n; i += 1) { heapsPermute(array, n - 1, results); if (n % 2) { var j = 1; } else { var j = i; } swap(array, j - 1, n - 1); } } return results; }; console.log(heapsPermute(['a', 'b', 'c', 'd'])); 

您需要添加數組的副本,而不是數組和它的對象引用。

results.push(array.slice());
//                ^^^^^^^^

 var swap = function (array, pos1, pos2) { var temp = array[pos1]; array[pos1] = array[pos2]; array[pos2] = temp; }; var heapsPermute = function (array, n, results = []) { n = n || array.length; if (n === 1) { results.push(array.slice()); } else { for (var i = 1; i <= n; i += 1) { heapsPermute(array, n - 1, results); if (n % 2) { var j = 1; } else { var j = i; } swap(array, j - 1, n - 1); } } return results; }; console.log(heapsPermute(['a', 'b', 'c', 'd']).map(a => a.join(' '))); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM