{"ScriptPreparationCode":null,"TestCases":[{"Name":"Classic","Code":"function permuteSlice(arr) {\r\n function generate(input, output, permutations) {\r\n if (input.length === 0) {\r\n permutations.push(output.slice());\r\n }\r\n\r\n for (let i = 0; i \u003C input.length; i\u002B\u002B) {\r\n let newInput = input.slice(0, i).concat(input.slice(i \u002B 1));\r\n output.push(input[i]);\r\n generate(newInput, output, permutations);\r\n output.pop();\r\n }\r\n\r\n return permutations;\r\n }\r\n return generate(arr, [], []);\r\n}\r\n\r\npermuteSlice([1, 2, 3, 4, 5])","IsDeferred":false},{"Name":"Johnson Trotter","Code":"function johnsonTrotterPermute(arr) {\r\n const permutations = [];\r\n function generate(n, input) {\r\n if (n === 1) {\r\n permutations.push([...input]);\r\n return;\r\n }\r\n generate(n - 1, input); // Recursively generate permutations for n - 1\r\n for (let i = 0; i \u003C n - 1; i\u002B\u002B) {\r\n // Decide which two elements to swap based on the parity of n\r\n if (n % 2 === 0) {\r\n [input[i], input[n - 1]] = [input[n - 1], input[i]];\r\n } else {\r\n [input[0], input[n - 1]] = [input[n - 1], input[0]];\r\n }\r\n generate(n - 1, input);\r\n }\r\n }\r\n generate(arr.length, arr);\r\n return permutations;\r\n}\r\n\r\njohnsonTrotterPermute([1, 2, 3, 4, 5])","IsDeferred":false}]}