求所有的组合数(不是排列)

 可剪枝!!

Input: n = 4, k = 2
Output:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]
/* 求1-n之间k位数的组合数
 * 递归 到第i步时 可选数set 中选择第k个和 combine
 * 或者分为两步 第一步取c(n,k) 按从小到大 然后进行全排列
 * c(n,k)取法:
 * */
class Solution {
public:
    vector> combine(int n, int k) {
        vector> ret;
        vector tmp;
        dfs(ret, tmp, n, k, 1);
        return ret;
    }

    void dfs(vector> &ret, vector &tmp, int &n, int &k, int step){
        if(tmp.size() == k){
            ret.push_back(tmp);
        }
        else{
            for(int i=step;i<=n;i++){
                if(n-i+1+tmp.size()

 

你可能感兴趣的:(求所有的组合数(不是排列))