LeetCode 77. 组合(Combinations)
题目描述
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
解题思路
回溯法,每次遍历到一个元素分为放入与不放入集合两种情况,若集合长度为k,则加入到结果中。
代码
1 class Solution { 2 public: 3 vector<vector<int>> combine(int n, int k) { 4 vector<vector<int>> res; 5 vector<int> nums, temp; 6 for(int i = 0; i < n; i++) 7 nums.push_back(i + 1); 8 cmb(n, k, 0, nums, temp, res); 9 return res; 10 } 11 void cmb(int n, int k, int idx, vector<int> nums, vector<int> &temp, vector<vector<int>> &res){ 12 if(k && temp.size() == k) 13 res.push_back(temp); 14 else if(idx < n){ 15 temp.push_back(nums[idx]); 16 cmb(n, k, idx + 1, nums, temp, res); 17 temp.pop_back(); 18 cmb(n, k, idx + 1, nums, temp, res); 19 } 20 } 21 };