帮我编写一个js函数 permn 传入数字n 返回所有排列的情况数组比如传入 2 返回 12 2 1
以下是一个可以实现你要求的 JavaScript 函数 perm(n):
function perm(n) {
// 创建一个数组来存储结果
var result = [];
// 辅助函数,用于生成排列
function permute(arr, m) {
// 当 m 等于 0 时,将当前排列添加到结果数组中
if (m === 0) {
result.push(arr.slice());
} else {
// 对每个位置进行排列
for (var i = 0; i < m; i++) {
// 交换第 i 个元素和最后一个元素
var temp = arr[i];
arr[i] = arr[m - 1];
arr[m - 1] = temp;
// 递归生成剩余位置的排列
permute(arr, m - 1);
// 恢复数组的原始顺序
temp = arr[i];
arr[i] = arr[m - 1];
arr[m - 1] = temp;
}
}
}
// 创建初始数组
var arr = [];
for (var i = 1; i <= n; i++) {
arr.push(i);
}
// 生成排列
permute(arr, n);
// 返回结果数组
return result;
}
// 测试例子
console.log(perm(2)); // [[1, 2], [2, 1]]
这个函数使用递归的方式生成排列。首先,我们创建一个辅助函数 permute,它接受一个数组 arr 和一个整数 m,表示要生成排列的数组和剩余位置的数量。当 m 等于 0 时,我们将当前排列添加到结果数组中。否则,我们对每个位置进行排列,通过交换第 i 个元素和最后一个元素,然后递归生成剩余位置的排列。在递归结束后,我们需要恢复数组的原始顺序,以便继续生成其他排列。
在 perm 函数中,我们首先创建一个初始数组 arr,包含从 1 到 n 的数字。然后,我们调用辅助函数 permute 来生成排列。最后,我们返回结果数组。
你可以通过调用 perm 函数并传入数字 n 来测试它的功能。在上面的例子中,我们传入 2,并打印结果数组到控制台。输出结果为 [[1, 2], [2, 1]],即所有排列的情况数组
原文地址: https://www.cveoy.top/t/topic/hUZZ 著作权归作者所有。请勿转载和采集!