leetcode 77. Combinations

https://www.cnblogs.com/grandyang/p/4332522.html

数字从1到n,生成所有具有k个的组合

本质上跟subsets更像,因为回溯回来只能选下一个位置的数值,可选择的数值在减少,搜索树的形状与subsets更像。

不同的是, 不是所有的节点都是可行解了,而是第k层所有的节点。

class Solution {
public:
    vector<vector<int>> combine(int n, int k) {
        vector<vector<int> > result;
        if(n <= 0 || k <= 0 || n < k)
            return result;
        vector<int> res;
        int level = 1;
        combine(n,k,result,res,level);
        return result;
    }   
    void combine(int n,int k,vector<vector<int> >& result,vector<int> res,int level){
        if(res.size() == k){
            result.push_back(res);
            return;
        }
        
        for(int i = level;i <= n;i++){
            res.push_back(i);
            combine(n,k,result,res,i+1);
            res.pop_back();
        }
    }
};
原文地址:https://www.cnblogs.com/ymjyqsx/p/10695824.html