Combinations
问题描述:
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],
]
测试代码(c++):
class Solution {
void compute_c(vector<vector<int>>& result,vector<int> res,int r,int start, int n)
{
if(r==0)
{
result.push_back(res);
return;
}
for(int j=start+1;j<=n;j++)
{
res.push_back(j);
compute_c(result,res,r-1,j,n);
res.pop_back();
}
}
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int>> result;
vector<int> res;
compute_c(result,res,k,0,n);
return result;
}
};
性能:
参考答案(c++):
class Solution {
public:
vector< vector<int> > ret;
vector<vector<int>> combine(int n, int k) {
vector<int> tmp(k,0);
helper(n,0,0,tmp);
return ret;
}
void helper(int n , int s , int i , vector<int> &tmp){
if(i == tmp.size()){
ret.push_back(tmp);
return ;
}
for(int k = s ; k < n ; ++k){
tmp[i] = k + 1;
helper(n,k+1,i+1,tmp);
}
}
};
性能:
参考答案(Python):
from itertools import combinations
class Solution:
def combine(self, n, k):
return list(combinations(range(1, n+1), k))