码迷,mamicode.com
首页 > 其他好文 > 详细

40. 组合总和 II-LeetCode

时间:2019-05-31 13:11:28      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:oid   时间   remove   integer   如何   http   ida   去重   tmp   

技术图片

心得:主要用到回溯和剪枝,一定要把剪枝的条件想全了,要不然时间会多很多

这里去重的地方要好好注意一下,如何去重的,能不用set尽量不用,比较优雅。

尽量把条件写的紧凑一点,能在一个递归里处理的在一个递归里处理,把条件改变

写在递归方法里,然后再去处理,这样代码量小,而且优雅。

 1 class Solution {
 2       public List<List<Integer>> combinationSum2(int[] candidates, int target){
 3            LinkedList<List<Integer>> list=new LinkedList<>();
 4             if(candidates==null||candidates.length==0)
 5                 return list;
 6             Arrays.sort(candidates);
 7             rec(0,list,new LinkedList<Integer>(),candidates,target);
 8             return list;
 9         }
10     public void rec(int index,LinkedList<List<Integer>> list,LinkedList<Integer> tmp,int[] candidates,int target)
11        {
12          if(target<0)
13              return;
14          else if(target==0)
15          {        
16              list.add(new LinkedList(tmp));
17              return;
18          }
19          else
20          {
21              for(int i=index;i< candidates.length&&candidates[i]<=target;i++)//这个剪枝条件就可以提高
//速度
22 { 23 if(i!=index&&candidates[i]==candidates[i-1]) 24 continue; 25 tmp.add(candidates[i]); 26 rec(i+1,list,tmp,candidates,target-candidates[i]); 27 tmp.removeLast(); 28 } 29 } 30 } 31 }

 

40. 组合总和 II-LeetCode

标签:oid   时间   remove   integer   如何   http   ida   去重   tmp   

原文地址:https://www.cnblogs.com/pc-m/p/10954734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!