77:
class Solution {
public:
vector<vector<int>> combine(int n, int k) {
vector<vector<int> > result;
vector<int> res;
vector<int> str;
getCombine(result, res,1, k, n);
return result;
}
void getCombine(vector<vector<int> >& result, vector<int>& res, int l, int k, int n){
// 若缓存的字符中。字符个数足够,则添加到解集中
if(res.size() == k){
result.push_back(res);
return ;
}else{
// 考虑每个数都能作为放置在第一位的起始值, 且 其后每一位只能在该值之后取
// 即: 123的情况下: 第一位取了1 后, 第二位 只能取1后面的两个值 所以 只有 1 2, 13,
// 对1234 而言,第一位为2 的情况下,两个值的可能: 2 3、 2 4.
for(int i=l;i<=n;++i){
res.push_back(i);
getCombine(result, res,i+1, k, n);
res.pop_back();
}
}
}
};
78 只是题目把解变了一种方式说出来 , 本来77题只要两个数的 可能组合。 ,现在78题要的是 0~n可数的所有可能组合。
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
if(nums.size() == 0)
return {};
vector<vector<int> > result;
vector<int> res;
result.push_back({});
for(int i=1;i<=nums.size();++i){
getSubset(result, res, nums, i, 0);
}
return result;
}
void getSubset(vector<vector<int> >& result, vector<int>& res, vector<int> nums, int need, int k){
if(res.size() == need){
result.push_back(res);
return ;
}else{
for(int i=k;i<nums.size();++i){
res.push_back(nums[i]);
getSubset(result, res, nums, need, i+1);
res.pop_back();
}
}
}
};