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. 组合总和(搜索回溯)的主要内容,如果未能解决你的问题,请参考以下文章