堆的算法返回数组而不是打印
Posted
技术标签:
【中文标题】堆的算法返回数组而不是打印【英文标题】:Heap's algorithm to return array instead of printing 【发布时间】:2019-03-13 10:12:54 【问题描述】:我试图让这个堆算法返回一个排列数组,而不是如下打印。我知道这可以通过在函数外部声明一个数组并推送到它来完成,但是我想避免这种方法。如何在不使用外部数组的情况下使其返回排列数组?
function heaps(arr, n)
if (n === undefined) n = arr.length;
if (n <= 1) console.log(arr);
else
for (let i = 0; i <= n - 1; i++)
heaps(arr, n-1);
if
(n % 2 === 0) [arr[n-1], arr[i]] = [arr[i], arr[n-1]];
else
[arr[n-1], arr[0]] = [arr[0], arr[n-1]];
【问题讨论】:
声明一个数组和一个辅助函数inside外部函数。 【参考方案1】:只需将 return
设为数组,然后从循环中的递归调用中收集返回值:
function heaps(arr, n = arr.length)
if (n <= 1) return [arr.slice()];
let result = [];
for (let i = 0; i <= n - 1; i++)
result.push(...heaps(arr, n-1));
if (n % 2 === 0)
[arr[n-1], arr[i]] = [arr[i], arr[n-1]];
else
[arr[n-1], arr[0]] = [arr[0], arr[n-1]];
return result;
或者,制作一个确实推送到外部数组的内部辅助函数
function heaps(arr)
let result = [];
function helper(n)
if (n <= 1)
result.push(arr.slice());
else
for (let i = 0; i <= n - 1; i++)
heaps(n-1);
if (n % 2 === 0)
[arr[n-1], arr[i]] = [arr[i], arr[n-1]];
else
[arr[n-1], arr[0]] = [arr[0], arr[n-1]];
helper(arr.length);
return result;
如果您坚持不使用“外部”数组,请将 result
数组和输入 arr
设置为辅助函数的显式参数。
【讨论】:
谢谢!第一个是我要找的。我正在努力删除从递归调用返回的数组层。以上是关于堆的算法返回数组而不是打印的主要内容,如果未能解决你的问题,请参考以下文章