[LeetCode]40 Combination Sum II

1502 단어 LeetCodeNP
https://oj.leetcode.com/problems/combination-sum-ii/
http://blog.csdn.net/linhuanmars/article/details/20829099
public class Solution {
    public List<List<Integer>> combinationSum2(int[] num, int target)
    {
        if (num == null || num.length == 0)
            return Collections.emptyList();

        // Sort
        Arrays.sort(num);

        Set<List<Integer>> result = new HashSet<>();        
        sum(num, target, 0, new ArrayList<Integer>(), result);
        return new ArrayList<List<Integer>>(result);
    }
    
    private void sum(int[] num, int t, int start, List<Integer> curnums, Set<List<Integer>> result)
    {
        if (t < 0)
            return;
            
        if (t == 0)
        {
            List<Integer> r = new ArrayList<>(curnums);
            Collections.sort(r);
            result.add(r);
            return;
        }
        
        for (int i = start ; i < num.length ; i ++)
        {
            curnums.add(num[i]);
            
            //              ,   nextstart = i + 1
            //     combination sum      
            //   ,             
            //           2
            //            2
            //             2
            //     set    
            int nextstart = i + 1;
            sum(num, t - num[i], i + 1, curnums, result);
            
            curnums.remove(curnums.size() - 1);
        }
    }
}

좋은 웹페이지 즐겨찾기