Leetcode39. 组合总和(搜索回溯)

Posted !0 !

tags:

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

题目链接:https://leetcode-cn.com/problems/combination-sum/

解题思路

这题看到数据范围就能猜到要用搜索做,我们遍历数组中每个数,只要target>0就一直把这个数加入集合,如果target==0,代表找到答案,返回集合;如果target<0就回溯遍历下一个值

代码

class Solution {
    List<List<Integer>> ans = new ArrayList<>();
    public List<List<Integer>> combinationSum(int[] c, int target) {
        dfs(c, target, new ArrayList<>(), 0);
        return ans;
    }
    public void dfs(int[] c, int target, List<Integer> res, int i) {
        if (i == c.length) //如果已经遍历完数组,直接返回
            return;
        if (target == 0) {  //找到符合的答案
            ans.add(new ArrayList<>(res));
            return;
        }
        // 选择当前数
        if (target - c[i] >= 0) {
            res.add(c[i]);  //选择当前数
            dfs(c, target - c[i], res, i);//重复选取
            res.remove(res.size() - 1); //回溯
        }
        // 不选当前数
        dfs(c, target, res, i + 1);
    }
}

以上是关于Leetcode39. 组合总和(搜索回溯)的主要内容,如果未能解决你的问题,请参考以下文章

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

39. 组合总和

回溯leetCode高频:39. 组合总和

Leetcode 39 组合总和(回溯算法解题)

递归与回溯6:LeetCode39组合总和(可重复使用)

算法 ---- LeetCode回溯系列问题题解