排列是指从数组生成所有可能的序列。在 JavaScript 中,可以使用几种不同的方法对整数数组进行排列。
一种方法涉及使用递归和记忆化来跟踪先前计算的排列。这是一个实现:
let permArr = []; let usedChars = []; function permute(input) { const chars = input.sort(); // Prevent duplicate permutations with identical values 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; }
另一种方法使用非变异切片技术来避免更改原始数组:
function permutator(inputArr) { let result = []; function permute(arr, memo = []) { if (arr.length === 0) { result.push(memo); } else { for (let i = 0; i < arr.length; i++) { permute(arr.slice(0, i).concat(arr.slice(i + 1)), memo.concat(arr[i])); } } } permute(inputArr); return result; }
非变异的 ES6 实现方法:
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; };
例如,使用以下输入数组:
[1, 2, 3]
排列函数将输出:
[ [ 1, 2, 3 ], [ 1, 3, 2 ], [ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ], [ 3, 2, 1 ] ]
这些排列是通过探索输入数组元素的所有可能组合来生成的,确保每个元素在每个元素中仅使用一次排列。
以上是如何在 JavaScript 中生成数组的所有排列?的详细内容。更多信息请关注PHP中文网其他相关文章!