• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

题目

oo1g11eue4o3312.png

题解

在力扣题目39 - 组合总和中我们做过类似的题

而40题多加了条件即有重复数字而且每个数只能选一次

其实我们可以从39题条件转换一下,即无限制重复被选取-有限制重复被选取

例如候选人=[2,5,2,1,2]

就是一可以取一次2可以取3次5可以取一次

这样的话就简单了我们只要在39题的基础上加入限制数量于是稍加改造即可

使用地图容器键做为数字价值作为数量而且地图也可以自动排序

在39题的基础上加入

如果价值为0则不选

如果价值不为0则选并且值-1

代码

ContractedBlock.gif

ExpandedBlockStart.gif

1 #包括牡蛎

2 #包含算法

3 # includevector

4 #includemap

5使用命名空间标准

6 int binationSum(mapint,int m,int target,mapint,int:iterator迭代器位置,int add,矢量测试向量向量分辨率)

7 {

8 //迭代器遍历

9 for (mapint,int :迭代器it=position它!=m . end();它)

10 {

11 //四种情况1.如果当前数字的数量为0 则不取跳过

12 if (it-second==0) {

13继续;

14 }

15 //四种情况2.小于增加是上一轮给的值如果这个数信息技术优先小于了说明有可能成为解更新一下增加继续递归

16 else if(添加它-第一个目标){

17//测试变更

18测试。push _ back(it-first);

19 //数量变更

20it-second-=1;

21 binationSum(m,target,it,add (it-first),test,RES);

22 //回溯

23秒=1;

24测试。pop _ back();

25 }

26 //四种情况3.等于增加是上一轮给的值如果这个数信息技术优先等于了说明试验加上信息技术优先就是解直接给表示留数

27 else if(add it-first==target)

28 {

29测试。push _ back(it-first);

30 res.push_back(测试);

31测试。pop _ back();

32 }

33 //四种情况4.大于增加是上一轮给的值如果这个数信息技术优先大于了说明无解直接返回退出

34其他{

35返回0;

36 }

37 }

38返回0;

39 }

40

41类解决方案{

42 public:

43矢量矢量组合Sum2(矢量候选,int目标){

44 //把候选人放入地图中

45 mapint,int m;

46 for(int I=0;我候选人。size();i ) {

47自动mm=m.find(候选人【我】);

48 if (mm==m.end()) {

49 m.insert(pairint,int(candidates,1));

50 }

51其他

52 {

53毫米-秒=1;

54 }

55 }

56矢量矢量分辨率;

57矢量测验;

58 //调用

59 binationSum(m,target,m.begin(),0,test,RES);

60个返回结果;

61 }

62 };

63 int main() {

64溶液溶胶;

65个矢量候选={ 2,5,2,1,2 };

66 int target=5;

67向量向量RES=sol。组合求和2(候选,目标);

68 for(int I=0;I RES . size();i ) {

69 for(int j=0;j . RES.size();j ) {

70法院决议[j];

71 }

72法院结束

73 }

74 }

查看代码

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now