# 77 - Combinations

解法一 - Backtracking

這題應該也算是基本題,要注意的只有每次 recursively 呼叫 helper 時,要記得把開始考慮的 index start+1,就不會列舉到重複的組合。

class Solution {
public:
    vector<vector<int>> combine(int n, int k) {
        vector<vector<int>> res;
        if(k<=0) return res;

        vector<int> tmp;
        helper(n, k, res, tmp, 1);

        return res;
    }

private:
    void helper(const int& n, const int&k, vector<vector<int>>& res, vector<int>& tmp, int start) {
        if(tmp.size() == k) { 
            res.push_back(tmp);
            return;
        }

        for(int i=start; i<=n; i++) {
            tmp.push_back(i);
            helper(n, k, res, tmp, i+1);
            tmp.pop_back();
        }
    }
};

Last updated