void findCombination(uint8_t i, uint32_t total){ if(total == 200) combinations++; else if(total < 200){ for(uint8_t j = i; j < 8; ++j){ findCombination(j, total + values[j]); } } }
vector<vector<int> > Solution::combinationSum2(vector<int> &num, int target) { vector<vector<int>> res; sort(num.begin(),num.end()); vector<int> local; findCombination(res, 0, target, local, num); return res; }
void Solution::findCombination(vector<vector<int> > &res, const int order, const int target, vector<int> &local, const vector<int> &num) { if(target==0) { res.push_back(local); return; } for(int i = order;i<num.size();i++) // iterative component { if(num[i]>target) return; if(i&&num[i]==num[i-1]&&i>order) continue; // check duplicate combination local.push_back(num[i]), findCombination(res,i+1,target-num[i],local,num); // recursive componenet local.pop_back(); } }
uint64_t e031(){ findCombination(0, 0); return combinations; }