mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-28 22:51:54 +08:00
96 lines
1.7 KiB
Markdown
Executable File
96 lines
1.7 KiB
Markdown
Executable File
# [60. Permutation Sequence](https://leetcode.com/problems/permutation-sequence/)
|
||
|
||
|
||
## 题目
|
||
|
||
The set `[1,2,3,...,*n*]` contains a total of *n*! unique permutations.
|
||
|
||
By listing and labeling all of the permutations in order, we get the following sequence for *n* = 3:
|
||
|
||
1. `"123"`
|
||
2. `"132"`
|
||
3. `"213"`
|
||
4. `"231"`
|
||
5. `"312"`
|
||
6. `"321"`
|
||
|
||
Given *n* and *k*, return the *k*th permutation sequence.
|
||
|
||
**Note**:
|
||
|
||
- Given *n* will be between 1 and 9 inclusive.
|
||
- Given *k* will be between 1 and *n*! inclusive.
|
||
|
||
**Example 1**:
|
||
|
||
```
|
||
|
||
Input: n = 3, k = 3
|
||
Output: "213"
|
||
|
||
```
|
||
|
||
**Example 2**:
|
||
|
||
```
|
||
|
||
Input: n = 4, k = 9
|
||
Output: "2314"
|
||
|
||
```
|
||
|
||
## 题目大意
|
||
|
||
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
|
||
|
||
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:"123","132","213","231","312","321",给定 n 和 k,返回第 k 个排列。
|
||
|
||
|
||
## 解题思路
|
||
|
||
- 用 DFS 暴力枚举,这种做法时间复杂度特别高,想想更优的解法。
|
||
|
||
## 代码
|
||
|
||
```go
|
||
|
||
package leetcode
|
||
|
||
import (
|
||
"fmt"
|
||
"strconv"
|
||
)
|
||
|
||
func getPermutation(n int, k int) string {
|
||
if k == 0 {
|
||
return ""
|
||
}
|
||
used, p, res := make([]bool, n), []int{}, ""
|
||
findPermutation(n, 0, &k, p, &res, &used)
|
||
return res
|
||
}
|
||
|
||
func findPermutation(n, index int, k *int, p []int, res *string, used *[]bool) {
|
||
fmt.Printf("n = %v index = %v k = %v p = %v res = %v user = %v\n", n, index, *k, p, *res, *used)
|
||
if index == n {
|
||
*k--
|
||
if *k == 0 {
|
||
for _, v := range p {
|
||
*res += strconv.Itoa(v + 1)
|
||
}
|
||
}
|
||
return
|
||
}
|
||
for i := 0; i < n; i++ {
|
||
if !(*used)[i] {
|
||
(*used)[i] = true
|
||
p = append(p, i)
|
||
findPermutation(n, index+1, k, p, res, used)
|
||
p = p[:len(p)-1]
|
||
(*used)[i] = false
|
||
}
|
||
}
|
||
return
|
||
}
|
||
|
||
``` |