LEETCODE 77. Combinations

来源:互联网 发布:球球大作战挂机软件 编辑:程序博客网 时间:2024/06/04 00:32

题目大意

这里写图片描述

解题思路

用递归的思路很简单,只需要将不重复的数字一次push进当前的vector就行,当vector的大小等于k的时候,就将结果记录下来。

代码

class Solution {public:    vector<vector<int>> combine(int n, int k) {        vector<vector<int>> resultVec;        vector<int> singleVec;        getCombs(resultVec, singleVec, 1, k, n);        return resultVec;    }private:    void getCombs(vector<vector<int>> &resVec, vector<int> singleComb, int beginInd, int vecSize, int numSize) {        if (singleComb.size() == vecSize) {            resVec.push_back(singleComb);            return;        }        for (int i = beginInd; i <= numSize; i++) {            singleComb.push_back(i);            getCombs(resVec, singleComb, i + 1, vecSize, numSize);            singleComb.pop_back();        }    }};

记录一个更快更简短的方法

class Solution {public:    vector<vector<int>> combine(int n, int k) {        vector<vector<int>> result;        int i = 0;        vector<int> p(k, 0);        while (i >= 0) {            p[i]++;            if (p[i] > n) --i;            else if (i == k - 1) result.push_back(p);            else {                ++i;                p[i] = p[i - 1];            }        }        return result;    }};
0 0