Combination Sum的递归解法

来源:互联网 发布:萨伏伊别墅尺寸数据图 编辑:程序博客网 时间:2024/06/04 23:30

题目链接:https://leetcode.com/problems/combination-sum/description/
题意大概是:
给出一个候选数组(表示一个一个集合即元素不重复)和一个目标整数,从候选数组中选出和为目标数的组合(元素可重复)。
有点像排列组合,可以用递归来解决

class Solution {public:    vector<vector<int> > combinationSum(vector<int>& candidates, int target) {        return comb(candidates, candidates.size()-1, target);    }    vector<vector<int> > comb(vector<int>& candidates, int end, int target) {         vector<vector<int> > vec;         int n;         if(target == 0){             vector<int>v;             vec.push_back(v);             return vec;         }        if(end <= -1){            return vec;        }else {            n = candidates[end];            for(int i = 0; n * i <= target; i++){                vector<vector<int> >tmp = comb(candidates, end - 1, target - n * i);                for(int j = 0; j < tmp.size(); j++){                   for(int k = 0; k < i; k++){                        tmp[j].push_back(n);                   }                    vec.push_back(tmp[j]);                }            }        }        return vec;    }};