LeetCode 40 Combination Sum II--In Java
来源:互联网 发布:淘宝网注册电话 编辑:程序博客网 时间:2024/06/06 09:56
主要思路为:
利用递归,进行深度优先搜索。构造递归函数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<List<Integer>> result;public static int N = 0;public static HashSet<List<Integer>> hs;public List<List<Integer>> combinationSum2(int[] candidates, int target) {N = candidates.length;Arrays.sort(candidates);orcan = candidates;result = new ArrayList<List<Integer>>();hs = new HashSet();ArrayList a = new ArrayList();f(0,0,target,a);return result; }public void f(int st,int st2,int lef,List<Integer> 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[0])return;if(st2<st)st2 = st;for(int i=st;i<N;i++){if(lef<orcan[i]){break;}for(int j=st2;j<N;j++){if(lef>=orcan[j]){ArrayList<Integer> 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处的值已经不再会被扫到了。
0 0
- LeetCode 40 Combination Sum II--In Java
- [Leetcode] Combination Sum II (Java)
- [LeetCode][Java] Combination Sum II
- LeetCode : Combination Sum II [java]
- LeetCode(40) Combination Sum II
- [leetcode 40] Combination Sum II
- leetcode || 40、Combination Sum II
- leetcode 40: Combination Sum II
- Leetcode #40 Combination Sum II
- LeetCode(40) Combination Sum II
- LeetCode-40 Combination Sum II
- LeetCode 40: Combination Sum II
- leetcode 40:Combination Sum II
- Leetcode 40 - Combination Sum II
- 【leetcode】【40】Combination Sum II
- LeetCode 40 - Combination Sum II
- LeetCode(40)-Combination Sum II
- 【LeetCode-40】Combination Sum II
- GDOI模拟 2.26
- spark源码学习(五):stage的划分和task的创建
- BZOJ 3728: PA2014Final Zarowki|贪心
- Beginner's Guide For How To Start A Startup
- <<精通iOS开发>>第14章例子代码彻底清除警告
- LeetCode 40 Combination Sum II--In Java
- GDOI2.25模拟总结
- mac osx terminal 报错:nohup: can't detach from console: Inappropriate ioctl for device
- bzoj2815 灾难 拓扑排序&lca
- STM32CubeMX本地升级固件库方法
- ARM64的启动过程之(一):内核第一个脚印
- ARM64的启动过程之(二):创建启动阶段的页表
- java中的java.util.Map的实现类
- ARM64的启动过程之(三):为打开MMU而进行的CPU初始化