77. 组合(DFS)

77. 组合

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

你可以按 任何顺序 返回答案。

 

示例 1:

输入:n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

示例 2:

输入:n = 1, k = 1
输出:[[1]]

 

提示:

  • 1 <= n <= 20
  • 1 <= k <= n
 1 class Solution {
 2 public:
 3     vector<vector<int>> ans;
 4     vector<int> tmp;
 5     void dfs(int i, int n, int k) { // 从i开始到n,长度为k的数组组合
 6         if (tmp.size() == k) {
 7             ans.emplace_back(tmp);
 8         } else {
 9             if (i <= n) {
10                 tmp.emplace_back(i);
11                 dfs(i + 1, n, k);
12                 tmp.pop_back(); // 回溯
13                 dfs(i + 1, n, k);
14             }
15         }
16         return;
17     }
18     vector<vector<int>> combine(int n, int k) {
19         dfs(1, n, k);
20         return ans;
21     }
22 };

 

posted @ 2022-06-03 01:18  跳动的休止符  阅读(40)  评论(0)    收藏  举报