gpt4 book ai didi

javascript - JavaScript 中的排列?

转载 作者:IT王子 更新时间:2023-10-29 02:38:54 26 4
gpt4 key购买 nike

我正在尝试编写一个执行以下操作的函数:

  • 将整数数组作为参数(例如 [1,2,3,4])
  • 创建 [1,2,3,4] 所有可能排列的数组,每个排列的长度为 4

下面的函数(我在网上找到的)通过将字符串作为参数并返回该字符串的所有排列来实现这一点

我不知道如何修改它以使其适用于整数数组,(我认为这与某些方法在字符串上的工作方式与在整数上的工作方式不同有关,但我不确定...)

let permArr = [];
let usedChars = [];

function permute(input) {
const chars = input.split("");
for (let i = 0; i < chars.length; i++) {
const ch = chars.splice(i, 1);
usedChars.push(ch);
if (chars.length === 0) {
permArr[permArr.length] = usedChars.join("");
}
permute(chars.join(""));
chars.splice(i, 0, ch);
usedChars.pop();
}
return permArr
};

注意:我希望函数返回整数数组,不是字符串数组。

我确实需要使用 JavaScript 的解决方案。我已经想出如何在 python 中执行此操作

最佳答案

有点晚了,但想在这里添加一个稍微更优雅的版本。可以是任何数组...

function permutator(inputArr) {
var results = [];

function permute(arr, memo) {
var cur, memo = memo || [];

for (var i = 0; i < arr.length; i++) {
cur = arr.splice(i, 1);
if (arr.length === 0) {
results.push(memo.concat(cur));
}
permute(arr.slice(), memo.concat(cur));
arr.splice(i, 0, cur[0]);
}

return results;
}

return permute(inputArr);
}

添加 ES6 (2015) 版本。也不改变原始输入数组。在 Chrome 的控制台中工作...

const permutator = (inputArr) => {
let result = [];

const permute = (arr, m = []) => {
if (arr.length === 0) {
result.push(m)
} else {
for (let i = 0; i < arr.length; i++) {
let curr = arr.slice();
let next = curr.splice(i, 1);
permute(curr.slice(), m.concat(next))
}
}
}

permute(inputArr)

return result;
}

所以...

permutator(['c','a','t']);

产量...

[ [ 'c', 'a', 't' ],
[ 'c', 't', 'a' ],
[ 'a', 'c', 't' ],
[ 'a', 't', 'c' ],
[ 't', 'c', 'a' ],
[ 't', 'a', 'c' ] ]

还有……

permutator([1,2,3]);

产量...

[ [ 1, 2, 3 ],
[ 1, 3, 2 ],
[ 2, 1, 3 ],
[ 2, 3, 1 ],
[ 3, 1, 2 ],
[ 3, 2, 1 ] ]

关于javascript - JavaScript 中的排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com