您的位置:首页 > 其它

LeetCode—*组合问题Combinations

2014-09-01 11:27 393 查看
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],
]

这道题目的思路是比较简单的
一个循环首先选取一个值,放在最前面,比他大的值选取后放置后面

class Solution {
public:

    vector<vector<int>> rt;
    vector<int> rtTemp;
    vector<vector<int> > combine(int n, int k)
    {
        rt.clear();
        rtTemp.resize(k);
        if(k > n)
        {
            return rt;
        }
        SubCombine(1,n,k,0);
        return rt;
    }
    
    void SubCombine(int start,int n,int k,int dep)
    {
       if(k == dep)
       {
           rt.push_back(rtTemp);
           return;
       }
       for(int i = start; i <= n; i++)
       {
           rtTemp[dep] = i;
           SubCombine(i+1,n,k,dep+1);
       }
    }
};
这里需要注意使用索引首先要对vector进行resize操作:

下面是使用push_back和pop_back进行处理,出现错误:

class Solution {
public:

    vector<vector<int>> rt;
    vector<int> rtTemp;
    vector<vector<int> > combine(int n, int k)
    {
        rt.clear();
        rtTemp.resize(k);
        if(k > n)
        {
            return rt;
        }
        SubCombine(1,n,k,0);
        return rt;
    }
    
    void SubCombine(int start,int n,int k,int dep)
    {
       if(k == dep)
       {
           rt.push_back(rtTemp);
           rtTemp.pop_back();
           return;
       }
       for(int i = start; i <= n; i++)
       {
           rtTemp.push_back(i);
           SubCombine(i+1,n,k,dep+1);
       }
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: