Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
For example,
If n = 4 and k = 2, a solution is:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
Hide Tags Backtracking
給定一個數n,求1到n之間的所有的k個數的組合。
這個題目可以在紙上畫下草圖,明顯可以用遞歸求解。遞歸的終止條件是k=0,並且由於需要將組合保存到集合vector中,還需要使用回溯法來保存數據。
runtime:8ms
class Solution {
public:
vector> combine(int n, int k) {
vector> result;
vector vec;
helper(1,n,k,vec,result);
return result;
}
void helper(int first,int last,int k,vector & vec,vector> & result)
{
if(k==0)
{
result.push_back(vec);
return ;
}
for(int i=first;i<=last-k+1;i++)
{
vec.push_back(i);
helper(i+1,last,k-1,vec,result);
vec.pop_back();
}
}
};