8000 add 60 solution · zykjcom/leetcode@bc20861 · GitHub
[go: up one dir, main page]

Skip to content

Commit bc20861

Browse files
committed
add 60 solution
1 parent ef5bd45 commit bc20861

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# 60. Permutation Sequence
2+
3+
## #1 回溯法[TLE]
4+
5+
### 思路
6+
7+
采用深度优先递归遍历,用一个数组记录已经采用的数字,当递归深度大于n的时候,就把结果保存下来,时间复杂度太高。
8+
9+
### 算法
10+
11+
```java
12+
class Solution {
13+
private List<String> res = new ArrayList<>();
14+
public String getPermutation(int n, int k) {
15+
boolean[] used = new boolean[n+1];
16+
backtrack(n, used, new StringBuffer(), 1);
17+
return res.get(k-1);
18+
}
19+
20+
public void backtrack(int n, boolean[] used, StringBuffer sb, int step){
21+
if(step == n+1){
22+
res.add(sb.toString());
23+
}
24+
for(int i=1; i<=n; i++){
25+
if(!used[i]){
26+
used[i] = true;
27+
sb.append(i);
28+
backtrack(n, used, sb, step+1);
29+
sb.deleteCharAt(sb.length()-1);
30+
used[i] = false;
31+
}
32+
}
33+
}
34+
}
35+
```
36+
37+
### 复杂度分析:
38+
39+
- 时间复杂度:$O(n!)$
40+
- 空间复杂度:$O(n)$
41+
42+
## #2 [AC]
43+
44+
### 算法
45+
46+
```java
47+
public class Solution {
48+
public String getPermutation(int n, int k) {
49+
StringBuilder sb = new StringBuilder();
50+
ArrayList<Integer> num = new ArrayList<Integer>();
51+
int fact = 1;
52+
for (int i = 1; i <= n; i++) {
53+
fact *= i;
54+
num.add(i);
55+
}
56+
for (int i = 0, l = k - 1; i < n; i++) {
57+
fact /= (n - i);
58+
int index = (l / fact);
59+
sb.append(num.remove(index));
60+
l -= index * fact;
61+
}
62+
return sb.toString();
63+
}
64+
}
65+
```
66+

0 commit comments

Comments
 (0)
0