Combinations

来源:互联网 发布:剪切歌曲软件 编辑:程序博客网 时间:2024/06/03 16:37

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],]
解析:

1. 使用递归方法,comb表示从begin位置的k个数的组合

2. 使用bit方法,对于2的n次方个数,判断每个数中1的个数是不是k,如果是K则返回对应的组合。

代码:

class Solution {public:    vector<vector<int>> combine(int n, int k) {        vector<vector<int>>ans;        vector<int>path;        comb(n,ans,path,1,k);        return ans;            }        void comb(int n,vector<vector<int>>&ans,vector<int>&path,int begin,int k)    {        if (path.size()==k)        {            ans.push_back(path);            return ;        }        for (int i=begin; i<=n; i++)        {            path.push_back(i);            comb(n,ans,path,i+1,k);            path.pop_back();        }        return ;    }    };

class Solution {public:    vector<vector<int>> combine(int n, int k) {        vector<vector<int>>ans;                int numcnt=pow(2,n);        for (int i=0; i<numcnt; i++)        {            if (Numberof1(i)!=k)            continue;            vector<int>path;            for (int j=0; j<n; j++)            {                if ((i>>j)&1)                {                    path.push_back(j+1);                }            }            ans.push_back(path);        }        return ans;    }            int Numberof1(int n)    {        int count=0;        while (n)        {            count++;            n=n&(n-1);        }        return count;    }}


0 0
原创粉丝点击