leetcode刷题_组合总和 II

题目描述

在这里插入图片描述

Java解决办法

class Solution {
    
    
    public List<List<Integer>> combinationSum2(int[] candidates, int target) {
    
    
        Arrays.sort(candidates);
        List<List<Integer>> lists = new ArrayList<>();
        Deque<Integer> list = new ArrayDeque<>();
        int len = candidates.length;
        fun(candidates,target,lists,0,len,list);
        return lists;
    }
    private void fun(int[] candidates, int target,List<List<Integer>> lists,int begin,int len,Deque<Integer> list)
    {
    
    
        if(target == 0)
        {
    
    
            lists.add(new ArrayList<>(list));
            return;
        }
        
        //回溯法+剪枝法
        for(int i = begin;i < len;i++)
        {
    
    
            if(target - candidates[i] < 0)
            {
    
    
                break;
            }

            //去掉重复的
            if (i > begin && candidates[i] == candidates[i - 1]) {
    
    
                continue;
            }

            list.addLast(candidates[i]);
            fun(candidates,target - candidates[i],lists,i + 1,len,list);
            list.removeLast();
        }
    }
}

在这里插入图片描述

おすすめ

転載: blog.csdn.net/qq_42148307/article/details/120371313