leetcode刷题_组合总和

题目描述

在这里插入图片描述
在这里插入图片描述

Java解决方法

class Solution {
    
    
    public List<List<Integer>> combinationSum(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;
            }

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

在这里插入图片描述

Guess you like

Origin blog.csdn.net/qq_42148307/article/details/120368834