59 lines
1.1 KiB
JavaScript
59 lines
1.1 KiB
JavaScript
|
/*
|
||
|
* Given a collection of distinct integers, return all possible permutations.
|
||
|
* Example:
|
||
|
*
|
||
|
* Input: [1,2,3]
|
||
|
* Output:
|
||
|
*
|
||
|
* [
|
||
|
* [1,2,3],
|
||
|
* [1,3,2],
|
||
|
* [2,1,3],
|
||
|
* [2,3,1],
|
||
|
* [3,1,2],
|
||
|
* [3,2,1]
|
||
|
*
|
||
|
* ]
|
||
|
*/
|
||
|
|
||
|
const { assert } = require('../../util/js');
|
||
|
|
||
|
/**
|
||
|
* @param {number[]} nums
|
||
|
* @return {number[][]}
|
||
|
*/
|
||
|
const permute = function(nums) {
|
||
|
|
||
|
const permuRecursive = (soFar, rest, perm) => {
|
||
|
if (rest.length === 0) {
|
||
|
perm.push(soFar);
|
||
|
}
|
||
|
|
||
|
for(let i = 0; i < rest.length; i++) {
|
||
|
const rem = [...rest.slice(0, i), ...rest.slice(i+1)];
|
||
|
permuRecursive([...soFar, rest[i]], rem, perm);
|
||
|
}
|
||
|
}
|
||
|
const result = [];
|
||
|
permuRecursive([], nums, result);
|
||
|
return result;
|
||
|
|
||
|
};
|
||
|
|
||
|
/* Test Case 1
|
||
|
* Input: [1,2,3]
|
||
|
* Output:
|
||
|
* [
|
||
|
* [1,2,3],
|
||
|
* [1,3,2],
|
||
|
* [2,1,3],
|
||
|
* [2,3,1],
|
||
|
* [3,1,2],
|
||
|
* [3,2,1]
|
||
|
*
|
||
|
* ]
|
||
|
*/
|
||
|
x = [1,2,3];
|
||
|
sol = [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]];
|
||
|
assert(JSON.stringify(permute(x)) === JSON.stringify(sol), `Output: ${JSON.stringify(sol)}`);
|