题目描述
给定两个整数 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 };
原文地址:https://www.cnblogs.com/wmx24/p/9547360.html
时间: 2024-11-14 12:42:06