博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 40. Combination Sum II (组合的和之二)
阅读量:5315 次
发布时间:2019-06-14

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

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]]

 


题目标签:Array

  这道题目和前面那一题本质一摸一样,不同之处是,这题每一个数字只能用一次,之前那题可以无限用;这一题给的array里有重复的,之前那题没有。所以只要之前那题做了,稍微改动一下就可以了。把递归下去的数字index 从i 改成 i + 1,因为这里不需要重复的数字了。再有就是要设一个条件,如果一个重复的数字,不是出现在第一位的话,就跳过它。

 

 

Java Solution:

Runtime beats 83.86% 

完成日期:07/17/2017

关键词:Array

关键点:Backtracking with sorted array

 

1 public class Solution  2 { 3     public List
> combinationSum2(int[] candidates, int target) 4 { 5 List
> list = new ArrayList<>(); 6 Arrays.sort(candidates); 7 backtrack(list, new ArrayList<>(), candidates, target, 0); 8 9 return list;10 }11 12 public boolean backtrack(List
> list, List
tempList, 13 int[] nums, int remain, int start)14 {15 if(remain < 0) // if remain is 0 or less than 0, meaning the rest numbers are even greater16 return false; // therefore, no need to continue the loop, return false17 else if(remain == 0)18 {19 list.add(new ArrayList<>(tempList));20 return false;21 }22 else23 {24 for(int i=start; i
start && nums[i] == nums[i-1])27 continue;28 boolean flag;29 tempList.add(nums[i]);30 flag = backtrack(list, tempList, nums, remain - nums[i], i+1); // i + 1 because we cannot use same number.31 tempList.remove(tempList.size() - 1);32 33 if(!flag) // if find a sum or fail to find a sum, there is no need to continue34 break;// because it is a sorted array with no duplicates, the rest numbers are even greater.35 }36 37 return true; // return true because previous tempList didn't find a sum or fail a sum38 }39 40 }41 }

参考资料:

http://www.cnblogs.com/grandyang/p/4419386.html

 

LeetCode 算法题目列表 - 

 

转载于:https://www.cnblogs.com/jimmycheng/p/7198400.html

你可能感兴趣的文章
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
关于View控件中的Context选择
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
linux下Rtree的安装
查看>>