Skip to content

Commit 46f4d6f

Browse files
authored
feat: add javascript solution to lcci problem: No.08.08.Permutation II (doocs#376)
1 parent bb0dfe8 commit 46f4d6f

File tree

3 files changed

+115
-0
lines changed

3 files changed

+115
-0
lines changed

lcci/08.08.Permutation II/README.md

+40
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,46 @@
4848

4949
```
5050

51+
### **JavaScript**
52+
53+
```js
54+
/**
55+
* @param {string} S
56+
* @return {string[]}
57+
*/
58+
var permutation = function(S) {
59+
let res = [];
60+
let arr = [...S];
61+
arr.sort();
62+
let prev = [];
63+
let record = new Array(S.length).fill(false);
64+
dfs(arr, 0, prev, record, res);
65+
return res;
66+
};
67+
68+
function dfs(arr, depth, prev, record, res) {
69+
if (depth == arr.length) {
70+
res.push(prev.join(''));
71+
return;
72+
}
73+
for (let i = 0; i < arr.length; i++) {
74+
if (record[i]) {
75+
continue;
76+
}
77+
// 剪枝
78+
if (i > 0 && arr[i] == arr[i - 1] && record[i - 1]) {
79+
continue;
80+
}
81+
prev.push(arr[i]);
82+
record[i] = true;
83+
dfs(arr, depth + 1, prev, record, res);
84+
// 回溯
85+
prev.pop();
86+
record[i] = false;
87+
}
88+
}
89+
```
90+
5191
### **...**
5292

5393
```

lcci/08.08.Permutation II/README_EN.md

+40
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,46 @@
4949

5050
```
5151

52+
### **JavaScript**
53+
54+
```js
55+
/**
56+
* @param {string} S
57+
* @return {string[]}
58+
*/
59+
var permutation = function(S) {
60+
let res = [];
61+
let arr = [...S];
62+
arr.sort();
63+
let prev = [];
64+
let record = new Array(S.length).fill(false);
65+
dfs(arr, 0, prev, record, res);
66+
return res;
67+
};
68+
69+
function dfs(arr, depth, prev, record, res) {
70+
if (depth == arr.length) {
71+
res.push(prev.join(''));
72+
return;
73+
}
74+
for (let i = 0; i < arr.length; i++) {
75+
if (record[i]) {
76+
continue;
77+
}
78+
// 剪枝
79+
if (i > 0 && arr[i] == arr[i - 1] && record[i - 1]) {
80+
continue;
81+
}
82+
prev.push(arr[i]);
83+
record[i] = true;
84+
dfs(arr, depth + 1, prev, record, res);
85+
// 回溯
86+
prev.pop();
87+
record[i] = false;
88+
}
89+
}
90+
```
91+
5292
### **...**
5393

5494
```

lcci/08.08.Permutation II/Solution.js

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* @param {string} S
3+
* @return {string[]}
4+
*/
5+
var permutation = function(S) {
6+
let res = [];
7+
let arr = [...S];
8+
arr.sort();
9+
let prev = [];
10+
let record = new Array(S.length).fill(false);
11+
dfs(arr, 0, prev, record, res);
12+
return res;
13+
};
14+
15+
function dfs(arr, depth, prev, record, res) {
16+
if (depth == arr.length) {
17+
res.push(prev.join(''));
18+
return;
19+
}
20+
for (let i = 0; i < arr.length; i++) {
21+
if (record[i]) {
22+
continue;
23+
}
24+
// 剪枝
25+
if (i > 0 && arr[i] == arr[i - 1] && record[i - 1]) {
26+
continue;
27+
}
28+
prev.push(arr[i]);
29+
record[i] = true;
30+
dfs(arr, depth + 1, prev, record, res);
31+
// 回溯
32+
prev.pop();
33+
record[i] = false;
34+
}
35+
}

0 commit comments

Comments
 (0)