【刷題1】LeetCode 39. 組合總和 java基礎

奔跑的廢柴發表於2020-11-25

題目

https://leetcode-cn.com/problems/combination-sum/
#

分析

我們可以選擇當前數或跳過當前數。
這題數字可以被重複使用。

程式碼

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;
        }
    } 
}

複雜度

在這裡插入圖片描述

結果

在這裡插入圖片描述

相關文章