Heap的算法到return数组而不是打印
Heap's algorithm to return array instead of printing
我正在尝试将此堆算法用于 return 排列数组,而不是如下所示打印。我知道这可以通过在函数外部声明一个数组并推送到它来完成,但是我想避免这种方法。如何在不使用外部数组的情况下使这个 return 成为排列数组?
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]];
}
}
}
只需将结果 return
作为数组,并从循环中的递归调用中收集 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;
}
如果您坚持 不使用 "outer" 数组,请使 result
数组和输入 arr
助手的显式参数功能。
我正在尝试将此堆算法用于 return 排列数组,而不是如下所示打印。我知道这可以通过在函数外部声明一个数组并推送到它来完成,但是我想避免这种方法。如何在不使用外部数组的情况下使这个 return 成为排列数组?
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]];
}
}
}
只需将结果 return
作为数组,并从循环中的递归调用中收集 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;
}
如果您坚持 不使用 "outer" 数组,请使 result
数组和输入 arr
助手的显式参数功能。