LeetCode/permutations/nodejs/index.js

59 lines
1.1 KiB
JavaScript
Raw Normal View History

2020-02-18 10:32:25 -06:00
/*
* 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)}`);