【LeetCode-40】Combination Sum II

来源:互联网 发布:随机抽取软件 编辑:程序博客网 时间:2024/06/05 02:22

这道题运用dfs(深度优先搜索的方法)

public class CombinationSumII {List<List<Integer>> ls = new ArrayList<List<Integer>>();List<Integer> temp = new ArrayList<Integer>();public List<List<Integer>> combinationSum2(int[] candidates, int target) {if(candidates == null || candidates.length == 0){return null;}                if(target <= 0){return ls; }        Arrays.sort(candidates);                wideSearch(candidates,target,0);                return ls;    }//熟悉这种回溯方法(dfs)public void wideSearch(int[] candidates,int target,int begin){//计算当前的temp中的和int sum = 0;for(int i = 0;i < temp.size();i ++){sum += temp.get(i);}if(sum == target){ArrayList<Integer> newlist = new ArrayList<Integer>(temp); ls.add(newlist);}else if(sum > target){return;}else{for(int i = begin;i < candidates.length;i ++){if(candidates[i] <= target){temp.add(candidates[i]);wideSearch(candidates, target,i + 1);temp.remove(temp.size() - 1);//跳过重复的元素(自习捋一捋这里,挺迷惑人的)while(i < (candidates.length - 1) && candidates[i] == candidates[i + 1]){i ++;}}}}} }


0 0