77. Combinations

来源:互联网 发布:js c标签的if else 编辑:程序博客网 时间:2024/05/17 23:13

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],
]

典型的回溯法,和取子集类似
要设置两个变量,一个count计数,count==k时输出,pos是数开始的位置

#include<iostream>#include<vector>using namespace std;class Solution {public:    vector<vector<int> > combine(int n, int k)     {        vector<vector<int> >ret;        vector<int>temp;        dfs(ret,temp,n,k,0,1);        return ret;    }    void dfs(vector<vector<int> >&ret,vector<int>&temp,int n,int k,int count,int pos)    {        if(count==k)        {            ret.push_back(temp);            return;        }        for(int i=pos;i<=n;i++)        {            temp.push_back(i);            dfs(ret,temp,n,k,count+1,i+1);            temp.pop_back();        }    }};int main(){    int n,k;    cin>>n>>k;    vector<vector<int> >ret;    Solution solve;    ret=solve.combine(n,k);    int i,j;    for(i=0;i<ret.size();i++)    {        for(j=0;j<k;j++)            cout<<ret[i][j]<<' ';        cout<<endl;    }    return 0;}
0 0
原创粉丝点击