LeetCode 77. 組合(Combinations)
阿新 • • 發佈:2018-08-28
所有 void int bsp lee 兩種 spa 每次 題目
題目描述
給定兩個整數 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 };
LeetCode 77. 組合(Combinations)