组合-LintCode

来源:互联网 发布:vb 图片的放大缩小 编辑:程序博客网 时间:2024/06/06 04:19

组给出两个整数n和k,返回从1……n中选出的k个数的组合。
样例
例如 n = 4 且 k = 2
返回的解为:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]

#ifndef C152_H#define C152_H#include<iostream>#include<vector>using namespace std;class Solution {public:    /**    * @param n: Given the range of numbers    * @param k: Given the numbers of combinations    * @return: All the combinations of k numbers out of 1..n    */    vector<vector<int> > combine(int n, int k) {        // write your code here        vector<vector<int>> v;        vector<vector<int>> comval;        if (n <= 0 || k <= 0)            return v;        vector<int> val;        int r = 1;        while (r <= k)        {            v = comval;            comval.clear();            if (r == 1)            {                for (int i = 1; i <= n; ++i)                {                    val.push_back(i);                    v.push_back(val);                    val.clear();                }            }                   int len = v.size();            for (int i = 0; i < len - 1; ++i)            {                int size = v[0].size();                if (v[i][size - 1] < n)                {                    for (int j = v[i][size - 1] + 1; j <= n; ++j)                    {                        v[i].push_back(j);                        comval.push_back(v[i]);                        v[i].pop_back();                    }                }            }            ++r;                            }        return v;    }};#endif