一、问题描述:

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

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

说明:

  • 所有数字(包括目标数)都是正整数。
  • 解集不能包含重复的组合。

示例 1:

输入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集为:
[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]

示例 2:

输入: candidates = [2,5,2,1,2], target = 5,
所求解集为:
[
  [1,2,2],
  [5]
]
二、思路
总体采用先递归回溯找到所有的可能值,然后进行去重处理
1.在递归过程中,对递归函数的构建(全局变量list存储可能值,nowData值存储某一个对象中的一系列值,number记录下一步需要添加的值,candidates数组,target目标值);
2.在递归函数中,我的思路是首先判断存储的nowData值是否符合目标值,如果符合则添加到全局变量中,如果不符合,再判断是否小于目标值。
3.小于目标值则继续添加下一个数字进行递归。
4.大于目标值则直接结束该递归函数
5.对于去重,直接使用set表进行去重,因为set表进行去重
三、代码
     public List<List<Integer>> combinationSum2(int[] candidates, int target) {
List<List<Integer>> temp=new ArrayList<List<Integer>>();
Arrays.sort(candidates);
for(int q=0;q<candidates.length;q++)
{
FindAll(temp, String.valueOf(candidates[q]), q+1, candidates, target);
} //利用set去重
Set<List<Integer>> alltemp=new HashSet<List<Integer>>(); alltemp.addAll(temp); temp.clear();
temp.addAll(alltemp);
return temp;
} //使用回溯算法
public void FindAll( List<List<Integer>> temp,String nowData,int number,int[]candidates,int target)
{ String [] nd=nowData.split(",");
int com=0;
for(int i=0;i<nd.length;i++)
{
com=Integer.parseInt(nd[i])+com;
} if(com==target)
{
//将记录的值转换为int类型并保存至数组中
List<Integer> smalltemp=new ArrayList<Integer>();
for(int j=0;j<nd.length;j++)
{
smalltemp.add(Integer.parseInt(nd[j])); }
temp.add(smalltemp);
}
else if(com>target)
{
return;
}
else
{
if(number>=candidates.length)
{
return;
}
else
{
for(int i=number;i<candidates.length;i++)
{
FindAll(temp, nowData+","+candidates[i], i+1, candidates, target);
} } }
}
												

第40题:组合总和II的更多相关文章

  1. Leetcode之回溯法专题-40. 组合总和 II(Combination Sum II)

    Leetcode之回溯法专题-40. 组合总和 II(Combination Sum II) 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使 ...

  2. 40. 组合总和 II + 递归 + 回溯 + 记录路径

    40. 组合总和 II LeetCode_40 题目描述 题解分析 此题和 39. 组合总和 + 递归 + 回溯 + 存储路径很像,只不过题目修改了一下. 题解的关键是首先将候选数组进行排序,然后记录 ...

  3. Java实现 LeetCode 40 组合总和 II(二)

    40. 组合总和 II 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在 ...

  4. 【JavaScript】Leetcode每日一题-组合总和4

    [JavaScript]Leetcode每日一题-组合总和4 [题目描述] 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 targ ...

  5. 组合总和 II

    组合总和 II 题目介绍 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates ...

  6. 40组合总和II

    题目:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合.candidates 中的每个数字在每个组合中只能使用一 ...

  7. LeetCode 中级 - 组合总和II(105)

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...

  8. leetcode第40题:组合总和II

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...

  9. Leetcode题库——40.组合总和II

    @author: ZZQ @software: PyCharm @file: combinationSum2.py @time: 2018/11/15 18:38 要求:给定一个数组 candidat ...

随机推荐

  1. sql语句 两表关联查询计算数量

    select sum(a1.`num`)   from `order_orderlistrow` as a1 INNER JOIN `order_orderlist` as a2 on a1.`ord ...

  2. linux之dup和dup2函数解析

    1. 文件描述符在内核中数据结构在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态.一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个 ...

  3. Reactor系列(五)map映射

    #java# #reactor# #flux# #map# #映射# 视频解视: https://www.bilibili.com/video/av79179444/ FluxMonoTestCase ...

  4. Nginx 小入门记录 之 初识Nginx和环境准备(一)

    前置知识准备: 如果还不知道服务器是干什么的,只是刚踏入程序员之路的,大家还是先学习基础,虽然以下文档很简单,但至少知道为什么要学: 一般服务器环境现在基本上都是放在Linux系统上了,如果对Linu ...

  5. docker安装mongodb和redis

    一.安装mongodb docker pull mongo docker run -p 27017:27017 -d --name mongodb01 mongo docker run -p 2701 ...

  6. INI配置文件格式解析

    INI配置文件有三要素parameters,sections和comments. 1.parameters 指一条配置,就像key = value这样的. 2.sections sections是pa ...

  7. javaweb配置连接mysql数据库

    1.首先新建基础连接类BaseDao,在这里配置链接的数据库名称,用户名以及密码,以及执行读与写操作的父方法,代码如下: package com.demo.dao; import java.sql.D ...

  8. cmake 升级

    cmake 升级 1下载   cmake-3.1.0.tar.gz2.解压 3.执行  ./configure 4.执行 make 5. 执行   sudo make install 6.添加环境变量 ...

  9. fiddler笔记:与Web Session的交互

    Decode Selected Session 解决响应体显示乱码的问题. AutoScroll Session List 决定Fiddler是否会自动将新增的Session添加到web sessio ...

  10. analysis_tools