📑 题目:77. 组合

🚀 本题 LeetCode 传送门

题目大意

给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。

解题思路

  • 计算排列组合中的组合,用 DFS 深搜即可,注意剪枝

代码

  1. package leetcode
  2. func combine(n int, k int) [][]int {
  3. if n <= 0 || k <= 0 || k > n {
  4. return [][]int{}
  5. }
  6. c, res := []int{}, [][]int{}
  7. generateCombinations(n, k, 1, c, &res)
  8. return res
  9. }
  10. func generateCombinations(n, k, start int, c []int, res *[][]int) {
  11. if len(c) == k {
  12. b := make([]int, len(c))
  13. copy(b, c)
  14. *res = append(*res, b)
  15. return
  16. }
  17. // i will at most be n - (k - c.size()) + 1
  18. for i := start; i <= n-(k-len(c))+1; i++ {
  19. c = append(c, i)
  20. generateCombinations(n, k, i+1, c, res)
  21. c = c[:len(c)-1]
  22. }
  23. return
  24. }