mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-29 23:23:42 +08:00
60 lines
1.0 KiB
Markdown
Executable File
60 lines
1.0 KiB
Markdown
Executable File
# [77. Combinations](https://leetcode.com/problems/combinations/)
|
||
|
||
|
||
## 题目
|
||
|
||
Given two integers *n* and *k*, return all possible combinations of *k* numbers out of 1 ... *n*.
|
||
|
||
**Example**:
|
||
|
||
Input: n = 4, k = 2
|
||
Output:
|
||
[
|
||
[2,4],
|
||
[3,4],
|
||
[2,3],
|
||
[1,2],
|
||
[1,3],
|
||
[1,4],
|
||
]
|
||
|
||
## 题目大意
|
||
|
||
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
|
||
|
||
## 解题思路
|
||
|
||
- 计算排列组合中的组合,用 DFS 深搜即可,注意剪枝
|
||
|
||
## 代码
|
||
|
||
```
|
||
|
||
package leetcode
|
||
|
||
func combine(n int, k int) [][]int {
|
||
if n <= 0 || k <= 0 || k > n {
|
||
return [][]int{}
|
||
}
|
||
c, res := []int{}, [][]int{}
|
||
generateCombinations(n, k, 1, c, &res)
|
||
return res
|
||
}
|
||
|
||
func generateCombinations(n, k, start int, c []int, res *[][]int) {
|
||
if len(c) == k {
|
||
b := make([]int, len(c))
|
||
copy(b, c)
|
||
*res = append(*res, b)
|
||
return
|
||
}
|
||
// i will at most be n - (k - c.size()) + 1
|
||
for i := start; i <= n-(k-len(c))+1; i++ {
|
||
c = append(c, i)
|
||
generateCombinations(n, k, i+1, c, res)
|
||
c = c[:len(c)-1]
|
||
}
|
||
return
|
||
}
|
||
|
||
``` |