Skip to content

Commit c890e0f

Browse files
committed
feat: add new solution for Permutations
1 parent faf510e commit c890e0f

File tree

1 file changed

+31
-10
lines changed

1 file changed

+31
-10
lines changed

TypeScript/46.permutations.ts

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,18 @@ function permute(nums: number[]): number[][] {
33
return [[...nums]];
44
}
55

6-
const allPerms: number[][] = [];
6+
const permutations: number[][] = [];
77

8-
for (let _ of nums) {
9-
const num = nums.pop()!;
10-
const perms = permute(nums);
8+
for (let i = 0; i < nums.length; i++) {
9+
const num = nums.shift();
1110

12-
for (let perm of perms) {
13-
perm.push(num);
14-
allPerms.push(perm);
11+
for (let perm of permute(nums)) {
12+
permutations.push([num, ...perm]);
1513
}
16-
17-
nums.unshift(num);
14+
nums.push(num);
1815
}
1916

20-
return allPerms;
17+
return permutations;
2118
}
2219

2320
function permute2(nums: number[], collected: number[] = []): number[][] {
@@ -38,3 +35,27 @@ function permute2(nums: number[], collected: number[] = []): number[][] {
3835

3936
return allPerms;
4037
}
38+
39+
function permute3(nums: number[]): number[][] {
40+
const permutations: number[][] = [];
41+
42+
function backtrace(candidates: number[], permutation: number[]) {
43+
if (candidates.length === 0) {
44+
permutations.push(permutation.slice());
45+
return;
46+
}
47+
48+
for (let i = 0; i < nums.length; i++) {
49+
const num = nums.shift();
50+
backtrace([...nums], [...permutation, num]);
51+
nums.push(num);
52+
}
53+
}
54+
55+
backtrace(nums, []);
56+
57+
return permutations;
58+
}
59+
60+
console.log(permute([1, 2, 3]));
61+
console.log(permute3([1, 2, 3]));

0 commit comments

Comments
 (0)