leetcode 39. 组合总和

这道题目看上去的第一眼我就想用dfs做,毕竟暴力一点的方法比较好想。

在第一次实现后,我发现最后的结果会有一部分重复项,比如:

题目:
输入: candidates = [2,3,6,7], target = 7, 所求解集为: [ [7], [2,2,3] ]
我的结果:
所求解集为:
[
  [7],
  [2,2,3],
  [2,3,2]
  [3,2,2]
]
可以发现我的结果会有一部分重复项,后来我对dfs方法中的循环做了一些简单的处理。
也就是,当开始加入下一个位置的数字后,以后的每一次调用,都不会加入这个位置之前的数字。
上代码
 1 class Solution {
 2     public List<List<Integer>> list=new ArrayList();
 3     public List<List<Integer>> combinationSum(int[] candidates, int target) {
 4         List li=new ArrayList();
 5         dfs(candidates,target,0,li,0);
 6         return list;
 7     }
 8     public void dfs(int[] candidates, int target,int total,List li,int step){
 9         if(total==target) {
10             List ll=new ArrayList(li);
11             list.add(ll);
12             return;
13         }
14         else
15             for(int n=step;n<candidates.length;++n)
16                 if(total+candidates[n]<=target) {
17                     li.add(candidates[n]);
18                     System.out.println(li);
19                     dfs(candidates,target,total+candidates[n],li,n);
20                     li.remove(li.size()-1);
21                 }
22     }
23 }

这样就可以完美解决了

posted @ 2019-03-10 15:13  你说你好  阅读(147)  评论(0编辑  收藏  举报