###### tags: `LeetCode` `Medium` `DFS`
# LeetCode #77 [Combinations](https://leetcode.com/problems/combinations/)
### (Medium)
給定兩個整數 n 和 k,返回範圍 [1, n] 中所有可能的 k 個數的組合。
你可以按 任何順序 返回答案。
---
這題有兩個變數: numbers(每一個組合的大小)以及pos(現在到哪個數了)。
終止條件也有兩個: numbers歸零(到達指定長度了, 此時將暫存數組存入答案數組)以及pos>range(越界了, 通常發生在後段, 此時因為長度不滿足題目要求, 因此不將暫存數組存入答案數組, 直接返回)。
每次遞迴呼叫時傳入的numbers要-1, pos要+1(不重複整數)。
---
```
class Solution {
public:
vector<vector<int>> combine(int range, int numbers) {
vector<int> tmp;
vector<vector<int>> ans;
dfs(range, numbers, tmp, ans, 1);
return ans;
}
void dfs(int range, int numbers, vector<int>& tmp, vector<vector<int>>& ans, int pos){
if(numbers==0){
ans.push_back(tmp);
return;
}
else if(pos>range)return;
for(int i=pos;i<=range;i++){
tmp.push_back(i);
dfs(range, numbers-1, tmp, ans, i+1);
tmp.pop_back();
}
}
};
```