博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从头做leetcode之leetcode 40 组合总数2
阅读量:2433 次
发布时间:2019-05-10

本文共 1172 字,大约阅读时间需要 3 分钟。

40.组合总数2

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用一次。

说明:

所有数字(包括目标数)都是正整数。

解集不能包含重复的组合。

DFS

  • 一开始以为和39是一样的,就把39的代码改了个i+1就提交了,结果发现了还有去重的问题
  • 去重使用的方法是先排序,然后在循环时把与前一个相等的跳过
  • 这里可能会有疑问:这样类似例子中[1,1,6]这样的不就跳过了吗?
    则把判断语句中的 i 从当前位置开始遍历就好,这样类似于[1,1,6]这样的例子中第二个 1 其实是在递归调用的第一个位置,所以不会被跳过
class Solution {
public: vector
> combinationSum2(vector
& candidates, int target) {
sort(candidates.begin(),candidates.end()); vector
> res; vector
ass; DFS(res,candidates,target,ass, 0, 0); return res; } void DFS(vector
> &res,vector
& candidates,int target,vector
& ass, int sum,int position){ if(sum == target){ res.push_back(ass); } else{ for(int i=position;i < candidates.size();i++){ if(i > position && candidates[i]==candidates[i-1]) continue; if(sum+candidates[i]<=target){ ass.push_back(candidates[i]); DFS(res,candidates,target,ass,sum+candidates[i], i+1); ass.pop_back(); } } } }};

通过时间:

在这里插入图片描述

转载地址:http://riemb.baihongyu.com/

你可能感兴趣的文章
ubuntu12.04安装openCV2.4.6.1
查看>>
jsp与servlet的作用以及区别--为什么说JSP底层就是一个Servlet
查看>>
看HashMap源码前的必备冷知识,白话文式教学,适合刚开始了解源码的新手观看
查看>>
Oracle安装指南
查看>>
Cookie对象入门详解
查看>>
通过Form表单一次性拿到json格式数据,及后台接收
查看>>
Mybatis异常:The content of elements must consist of well-formed.......(一般出现在写分页/带大于小于号的SQL)
查看>>
Mybatis光速入门(配置文件模块)
查看>>
手撕HashMap的resize()方法源码渗透解析+图解
查看>>
Mybatis常见异常类型Could not set parameters for mapping离不开这个原因!
查看>>
JAVA如何实现短信验证码--阿里云接口,新手式图文教学,个人项目有这一篇就够了
查看>>
Java中大小数BigDecimal的加减乘除用法及场景的详细介绍,看完不信你还会报Syntax error on token “+/-/*“, invalid AssignmentOperat异常
查看>>
UVa 10917 Dijkstra
查看>>
CF403B/CF402D
查看>>
CF402E / 403C
查看>>
cf404c
查看>>
cf404d
查看>>
武大网络预赛 Problem 1545 - I - Twenty-four
查看>>
ZOJ Problem Set - 3768 Continuous Login
查看>>
某山面试 3、实现如下函数:
查看>>