LeetCode: Combinations

来源:互联网 发布:cache数据库手册 编辑:程序博客网 时间:2024/05/01 19:51

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],]
#include<iostream>#include<vector>#include<map>#include <algorithm>using namespace::std;#include <algorithm>#include <algorithm>class Solution {public:void findCombination(int n, int k, vector<vector<int> >& result, vector<int> path, int start){if(n <= 0 || k <= 0)return;if(k > n)return;//cout<<path.size()<<endl;if(path.size() == k){//cout<<"here"<<endl;result.push_back(path);}if(path.size() < k){//vector<int> tmp_vec(path);for(int i = start; i <= n; i++){path.push_back(i);findCombination(n, k, result, path, path.back() + 1);path.pop_back();}}}    vector<vector<int> > combine(int n, int k) {        // Start typing your C/C++ solution below        // DO NOT write int main() functionvector<vector<int> > result;vector<int> path;        findCombination(n, k, result, path, 1);return result;    }};int main(){vector<int> input;input.push_back(1);input.push_back(2);//input.push_back(10);Solution ss;vector<vector<int> > result = ss.combine(1, 1);for(int i = 0; i < result.size(); i++){for(int j = 0; j < result[i].size(); j++){cout<<result[i][j];}cout<<endl;}}


Round 2:
class Solution {public:    vector<vector<int> > combine(int n, int k) {        vector<vector<int> > result;        if(n == 0 || k == 0)            return result;        vector<int> cur;        dfs(k, n, result, 1, cur);        return result;    }private:    void dfs(int k, int n, vector<vector<int> > &result, int index, vector<int> &cur)    {                if(cur.size() == k)        {            result.push_back(cur);            return;        }        if(index > n)            return;        dfs(k, n, result, index+1, cur);        cur.push_back(index);        dfs(k, n, result, index+1, cur);        cur.pop_back();    }};


原创粉丝点击