Combination Sum 和Combination Sum II
生活随笔
收集整理的這篇文章主要介紹了
Combination Sum 和Combination Sum II
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這兩道題的基本思路和combination那一題是一致的,也是分治的方法。
其中combination Sum復雜一點,因為每個數可能用多次。仔細分析下,本質上也是一樣的。原來是每個數僅兩種可能。現在每個數有k +1中可能,k = target / i。
所以就是把簡單的if else 分支變成for循環:
vector<vector<int> > combHelper(vector<int>::iterator first,vector<int>::iterator last, int target){vector<vector<int>> result;if (target <= 0 || last == first) return result;if (*(last - 1) == target){vector<int> vi;vi.push_back(target);result.push_back(vi);auto r2 = combHelper(first, last - 1, target);for (auto it = r2.begin(); it != r2.end(); it++)result.push_back(*it);}else if (*(last - 1) < target){auto r1 = combHelper(first, last - 1, target - *(last - 1));for (auto it = r1.begin(); it != r1.end(); it++){it->push_back(*(last - 1));result.push_back(*it);}auto r2 = combHelper(first, last - 1, target);for (auto it = r2.begin(); it != r2.end(); it++)result.push_back(*it);}else {auto r2 = combHelper(first, last - 1, target);for (auto it = r2.begin(); it != r2.end(); it++)result.push_back(*it);}return result; } vector<vector<int> > combinationSum2(vector<int> &num, int target) {sort(num.begin(), num.end());auto result = combHelper(num.begin(), num.end(), target);if (!result.empty()){sort(result.begin(), result.end());auto it = unique(result.begin(), result.end());result.erase(it, result.end());}return result; }
?
轉載于:https://www.cnblogs.com/hustxujinkang/p/3967332.html
總結
以上是生活随笔為你收集整理的Combination Sum 和Combination Sum II的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyEclipse常用配置图解
- 下一篇: 精读《javascript高级程序设计》