排列是指從陣列產生所有可能的序列。在 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中文網其他相關文章!