39. 组合总和

Posted 不吐西瓜籽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了39. 组合总和相关的知识,希望对你有一定的参考价值。

算法记录

LeetCode 题目:

  给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。



说明

一、题目

  candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。

二、分析

  • 每个数据可以有两种选择, 一是不计入当前的求和列表, 二是计入当前的求和列表并统计数据.
  • 也就可以抽象为一棵二叉树, 但是需要注意每次选取当前数之后下一次依然是可选取的, 每次的数据进行保存之后需要进行一次路径的返回, 不然会造成相同的列表的叠加.
class Solution {
    private List<List<Integer>> ans = new ArrayList();
    private List<Integer> temp = new ArrayList(); 
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        dfs(0, candidates, target);
        return ans;
    }
    private void dfs(int idx, int[] candidates, int target) {
        if(idx == candidates.length) return ;
        if(target < 0) return ;
        if(target == 0) {
            ans.add(new ArrayList(temp));
            return ;
        }
        temp.add(candidates[idx]);
        dfs(idx, candidates, target - candidates[idx]);
        temp.remove(temp.size() - 1);
        dfs(idx + 1, candidates ,target);
    }
}

总结

熟悉深度优先搜索的展开。

以上是关于39. 组合总和的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-----39. 组合总和

leetcode 39. 组合总和---回溯篇2

精选力扣500题 第70题 39. 组合总和c++/java详细题解

39. 组合总和

39. 组合总和

39. 组合总和回溯Normal