news 2026/9/2 16:47:53

豆包 LeetCode 39. 组合总和 Java实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
豆包 LeetCode 39. 组合总和 Java实现

题目说明

LeetCode39 组合总和
给定无重复元素候选数组 candidates 和目标 target ,可以重复选取数组元素,找出所有和为 target 的组合。

  • 同一个数字可以多次选用
  • 组合顺序无关,不能重复输出组合
  • 回溯DFS实现

Java完整代码

java

import java.util.ArrayList;
import java.util.List;

class Solution {
public List<List> combinationSum(int[] candidates, int target) {
List<List> res = new ArrayList<>();
List path = new ArrayList<>();
backtrack(candidates, target, 0, path, res);
return res;
}

/** * @param start 只从start往后选,避免产生[2,3]和[3,2]重复组合 * @param path 当前选中的数字路径 */ private void backtrack(int[] candidates, int remain, int start, List<Integer> path, List<List<Integer>> res) { if (remain == 0) { res.add(new ArrayList<>(path)); return; } if (remain < 0) { return; } for (int i = start; i < candidates.length; i++) { int val = candidates[i]; path.add(val); // 仍从i开始,允许重复选取当前元素 backtrack(candidates, remain - val, i, path, res); path.remove(path.size() - 1); // 回溯撤销选择 } }

}

核心思路

  1. 回溯+DFS:逐个枚举候选数字
  2. start索引去重:只从start向后遍历,防止不同排列视为不同答案(例如 [2,3] 与 [3,2] )
  3. 允许重复选取:递归下一层起点仍然是 i 而不是 i+1
  4. 递归终止:剩余值 remain == 0 收集答案; remain<0 剪枝返回

复杂度简要分析

  • 时间:指数级 O(2^N),取决于可行组合数量
  • 空间:O(target),递归栈深度

测试示例

java

public static void main(String[] args) {
Solution sol=new Solution();
int[] arr={2,3,6,7};
System.out.println(sol.combinationSum(arr,7));
//输出 [[2,2,3],[7]]
}

如果你需要,我可以提供剪枝优化版本(先排序提前终止循环)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 16:44:07

ab-testing - sample-size-guide

样本量指南 计算样本量和测试持续时间的参考。 目录 样本量基础&#xff08;所需输入、含义&#xff09;样本量快速参考表持续时间计算器&#xff08;公式、示例、最小持续时间规则、最大持续时间指南&#xff09;在线计算器为多个变体调整常见样本量错误当样本量要求过高时顺序…

作者头像 李华
网站建设 2026/9/2 16:40:04

python-第17天:元组 (Tuple) 与 集合 (Set) 全解析

Python 数据容器进阶&#xff1a;元组 (Tuple) 与 集合 (Set) 全解析 在 Python 的编程世界里&#xff0c;数据存储不仅仅是“把东西放进列表&#xff08;List&#xff09;”那么简单。为了编写更高效、更安全的代码&#xff0c;我们需要根据场景选择最合适的容器。 本文将深…

作者头像 李华
网站建设 2026/9/2 16:37:57

自改进AI Agent的三大核心模块:记忆、反思与策略更新

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/2 16:37:52

Vue3移动端开发实战:从零构建H5应用的技术栈与最佳实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华