40. Combination Sum II(unsolved)
来源:互联网 发布:中国国家顶级域名 编辑:程序博客网 时间:2024/06/16 04:50
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]
]
解答:这道题和39.Combination Sum的区别在于这里有重复的数字,而且单独一个数字我们不能计算两遍。
我没有解答出来,不过别人的解法的精妙之处在于先sort之后,把相同的数字放到了临近的位置,然后当我们考虑重复的数字时,假如这个数字是大于stage的,即这个数字是要在这里开始重复统计的(这里是有点违反直觉的一点),那么舍弃从这个数字开始的递归(因为之前那个数字已经进入过递归了)。
class Solution {public: vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { vector<vector<int>> result; vector<int> path; sort(candidates.begin(),candidates.end()); addsum(candidates,result,path,0,target); return result; } void addsum(vector<int>& candidates,vector<vector<int>>& result,vector<int> path,int stage,int target) { if(target==0) { result.push_back(path); return; } for(int i=stage;i<candidates.size();i++) { if(candidates[i]<=target) { if(i&&candidates[i]==candidates[i-1]&&i>stage) continue; path.push_back(candidates[i]); addsum(candidates,result,path,i+1,target-candidates[i]); path.pop_back(); } } }};
这是二刷时的自己做出来的程序,注意i!=begin这条语句。因为i==begin时是一定可以放入的,这是第一次考虑此数
class Solution {public: vector<vector<int>> result; vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { sort(candidates.begin(),candidates.end()); solve(candidates,{},0,candidates.size(),target); return result; } void solve(vector<int>& candidates,vector<int> temp ,int begin,int end,int target){ if(target<0) return ; if(target==0) { result.push_back(temp); return ; } for(int i=begin;i<end;i++) { if(i!=begin&&candidates[i]==candidates[i-1]) continue; temp.push_back(candidates[i]); solve(candidates,temp,i+1,end,target-candidates[i]); temp.pop_back(); } return ; }};
- 40. Combination Sum II(unsolved)
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- 40. Combination Sum II
- linq对数据集多个字段进行分组
- WINVNC源码分析(五)——vnchooks
- PS作品-毕业车票
- SpringMVC
- 优化MySchool 第七章课后
- 40. Combination Sum II(unsolved)
- 88. Merge Sorted Array python
- JS里for循环遍历对象的顺序---是按成员添加到对象中的先后顺序遍历的
- 机器学习核函数理解
- 第一周:[LeetCode]1. Two Sum
- SpringMVC multipart文件上传详细教程之一:项目概述及基本配置
- webapi接收上传的文件和相关参数
- 数据库的查询排序、分组查询及筛选
- 洋洋洒洒一大片的aio实验代码