欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【刷题1】LeetCode 39. 组合总和 java基础

程序员文章站 2022-07-15 19:52:37
...

题目

https://leetcode-cn.com/problems/combination-sum/
【刷题1】LeetCode 39. 组合总和 java基础

分析

我们可以选择当前数或跳过当前数。
这题数字可以被重复使用。

代码

class Solution {
    List<List<Integer>> res;
    int[] candidates;
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        this.candidates=candidates;
        res=new ArrayList<List<Integer>>();
        dfs(new ArrayList<Integer>(),0,target);
        return res;
    }
    public void dfs(ArrayList<Integer> tmp,int index,int target){
        if(index>candidates.length-1){
            return;
        }
        if(target==0){
           res.add(new ArrayList(tmp));
           return;
        }
        //直接跳过,不选取当前数
        dfs(tmp,index+1,target);   
        //选择当前数     
        if(target>=candidates[index]){
            tmp.add(candidates[index]);
            dfs(tmp,index,target-candidates[index]);
            //恢复
            tmp.remove(tmp.size()-1);
            return;
        }
    } 
}

复杂度

【刷题1】LeetCode 39. 组合总和 java基础

结果

【刷题1】LeetCode 39. 组合总和 java基础

相关标签: LeetCode