LeetCode CombinationSum
class Solution { public: vector<vector<int> > combinationSum(vector<int> &candidates, int target) { sort(candidates.begin(), candidates.end()); candidates.erase(unique(candidates.begin(), candidates.end()), candidates.end()); vector<vector<int> > tmp; vector<int> sel; dfs(candidates, 0, target, sel, tmp); return tmp; } void dfs(vector<int>& nums, int pos, int tar, vector<int>& sel, vector<vector<int> >& res) { if (tar == 0) { res.push_back(sel); return; } if (pos >= nums.size()) return; int cur = nums[pos]; int add = 0; for (add = 0; add <= tar; add+=cur) { if (add != 0) { sel.push_back(cur); } dfs(nums, pos + 1, tar - add, sel, res); } for (int i = add/cur - 1; i>0; i--) { sel.pop_back(); } } };
dfs搜索,通过unique操作去除重复的候选数字,避免产生重复的序列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步