LeetCode--Combination Sum II

xiaoxiao2021-02-27  137

Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

Each number in C may only be used once in the combination.

Note: All numbers (including target) will be positive integers. The solution set must not contain duplicate combinations. For example, given candidate set [10, 1, 2, 7, 6, 1, 5] and target 8, A solution set is: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]

思路:深度优先搜索。 这一题和前一题模版框架相同,不同点在于每次不能用这次重复的数,所以要从下一个i+1起递归调用,然后用一个临时变量记录这次的值,如果同一层第二个数相同,那么则重复跳过。

class Solution { public: vector<vector<int>> combinationSum2(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); vector<int>path; vector<vector<int>>result; dfs(nums,result,path,target,0); return result; } void dfs(vector<int>&nums,vector<vector<int>>&result,vector<int>&path,int gap,int start){ int temp=-1; if(!gap) result.push_back(path); for(int i=start;i<nums.size();i++){ if(temp==nums[i]) continue; if(gap<nums[i]) return; temp=nums[i]; path.push_back(nums[i]); dfs(nums,result,path,gap-nums[i],i+1); path.pop_back(); } } };
转载请注明原文地址: https://www.6miu.com/read-16301.html

最新回复(0)