博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 40 Combination Sum II--In Java
阅读量:4090 次
发布时间:2019-05-25

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

主要思路为:

利用递归,进行深度优先搜索。构造递归函数f(int st,int st2,int lef,List<Integer> ar),st表示本轮搜索ar中开始元素的下标,st2表示最后一个纳入ar的元素下标。例如f(0,0,20,ar)的含义为:从第0个到第0个范围内的元素进行组合,还剩余的目标为20,已经判断合法的中间结果存在ar中。

public static int[] orcan;	public static List
> result; public static int N = 0; public static HashSet
> hs; public List
> combinationSum2(int[] candidates, int target) { N = candidates.length; Arrays.sort(candidates); orcan = candidates; result = new ArrayList
>(); hs = new HashSet(); ArrayList a = new ArrayList(); f(0,0,target,a); return result; } public void f(int st,int st2,int lef,List
ar){ if(lef==0){ //System.out.println("paixuqian"+ar.toString()); //Collections.sort(ar,new bijiaoqi()); if(hs.contains(ar)) return; //System.out.println("paixuhou"+ar.toString()); else{ result.add(ar); hs.add(ar); return; } } if(st>=N) return; if(lef
=orcan[j]){ ArrayList
nar = new ArrayList<>(ar); nar.add(orcan[j]); st2=j; f(i,st2+1,lef-orcan[j],nar); }else{ break; } } } }
这里有一个优化,即将递归处的f(i,....)变为i+1,可以减少循环的次数,而不影响结果的正确性。这是因为,此时i处的值已经不再会被扫到了。

你可能感兴趣的文章
[Jad] Java的反编译工具
查看>>
MapReduce: Simplified DataProcessingonLargeClusters阅读笔记
查看>>
MySQL导出查询数据出现--secure-file-priv选项问题
查看>>
MySQL导入导出数据的中文乱码问题
查看>>
#define的用法
查看>>
typedef的用法
查看>>
数组名和函数名是什么东西
查看>>
RT-Thread代码启动过程与线程切换的实现
查看>>
RT-Thread进阶笔记之FinSH组件
查看>>
RT-Thread进阶笔记之内核架构
查看>>
RT-Thread 进阶笔记之自动初始化机制
查看>>
RT-Thread进阶笔记之设备框架
查看>>
RT-Thread进阶笔记之虚拟文件系统
查看>>
RT-Thread进阶笔记之网络框架
查看>>
C/C++面向对象编程之封装
查看>>
C/C++面向对象编程之继承
查看>>
C/C++面向对象编程之多态
查看>>
变量的本质和关键字
查看>>
被遗忘的C结构体封装技术
查看>>
LWIP学习笔记1——基础介绍
查看>>