> For the complete documentation index, see [llms.txt](https://soumyajit4419.gitbook.io/ds-algo/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://soumyajit4419.gitbook.io/ds-algo/recursion-and-backtracking/23.combinations.md).

# 2.Combinations

Given two integers *n* and *k*, return all possible combinations of *k* numbers out of 1 ... *n*.\
You may return the answer in **any order**.

```
Example 1:
Input: n = 4, k = 2
Output:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

Example 2:
Input: n = 1, k = 1
Output: [[1]]
```

## Solution: (Backtracking)

```cpp
class Solution
{
public:
    vector<vector<int>> res;
    vector<int> a;

    void compute(int n, int k, int start)
    {

        if (k == 0)
        {
            res.push_back(a);
        }

        for (int i = start; i <= n; i++)
        {
            a.push_back(i);
            compute(n, k - 1, i + 1);
            a.pop_back();
        }
        return;
    }
    
    vector<vector<int>> combine(int n, int k)
    {

        compute(n, k, 1);
        return res;
    }
};
```

**Time Complexity: O(n^k)**
