使用遞歸就斤。
對于給定數(shù)組中的每個元素峡谊,為其其余元素創(chuàng)建所有部分排列崖面。
使用Array.prototype.map()方法將元素與每個部分排列組合厚骗,然后使用Array.prototype.reduce()方法將所有排列組合到一個數(shù)組中椅寺。
使Array.prototype.length等于2或1浑槽。
??警告:這個函數(shù)的執(zhí)行時間隨著每個數(shù)組元素呈指數(shù)增長。任何超過 8 到 10 個條目都可能導(dǎo)致您的瀏覽器在嘗試解決所有不同組合時掛起返帕。
JavaScript
const permutations = arr => {
? if (arr.length <= 2) return arr.length === 2 ? [arr, [arr[1], arr[0]]] : arr;
? return arr.reduce(
? ? (acc, item, i) =>
? ? ? acc.concat(
? ? ? ? permutations([...arr.slice(0, i), ...arr.slice(i + 1)]).map(val => [
? ? ? ? ? item,
? ? ? ? ? ...val,
? ? ? ? ])
? ? ? ),
? ? []
? );
};
更多內(nèi)容請訪問我的網(wǎng)站:https://www.icoderoad.com