LeetCode Combination Sum II

Given a collection of candidate numbers (, … ,≤).The solution set must not contain duplicate combinations.

For example, given candidate set10,1,2,7,6,1,5and target8,A solution set is:[1, 7][1, 2, 5][2, 6]

[1, 1, 6]

思路分析:这题和Combination Sum很像,唯一的区别是每个数只能使用一次,只需要dfs传入start参数为当前位置的下一个位置i+1即可,详细分析参见Combination Sum的题解。两题代码几乎一样,只有一行不同。

AC Code

public class Solution {public List<List<Integer>> combinationSum2(int[] num, int target) {//1240List<List<Integer>> res = new ArrayList<List<Integer>>();int m = num.length;if(m == 0) return res;Arrays.sort(num);List<Integer> item = new ArrayList<Integer>();dfs(num, target, 0, item, res);return res;}public void dfs(int[] num, int target, int start, List<Integer> item, List<List<Integer>> res){if(target == 0){res.add(new ArrayList<Integer>(item));return;}if(target < 0) return;for(int i = start; i < num.length; i++){if(i > start && num[i] == num[i-1]) continue;// avoid duplicate solutionsitem.add(num[i]);dfs(num, target – num[i], i + 1, item, res);item.remove(item.size() – 1);}}//1255}

,如若今生再相见,哪怕流离百世,迷途千年,也愿。

LeetCode Combination Sum II

相关文章:

你感兴趣的文章:

标签云: