1. 程式人生 > >LeetCode 77. 組合(Combinations)

LeetCode 77. 組合(Combinations)

所有 void int bsp lee 兩種 spa 每次 題目

題目描述

給定兩個整數 nk,返回 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)