Leetcode 组合总和 III

embedded/2025/4/1 23:50:54/

在这里插入图片描述

回溯法

java solution

class Solution {public List<List<Integer>> combinationSum3(int k, int n) {//先创建返回的结果List<List<Integer>> result = new ArrayList<>();//然后开始回溯backtrack(k, n, 1, new ArrayList<>(), result);//返回结果return result;}private void backtrack(int k, int remain, int start, List<Integer> path, List<List<Integer>> result) {//首先判断是否满足条件,如果剩余和等于0且当前组合的长度为k, 添加当前path到result中,然后返回if(path.size() == k && remain == 0) {result.add(new ArrayList<>(path));return;}//然后进行剪枝, 组合长度超过k 或者 remain < 0 时需要剪枝if(path.size() > k || remain < 0) return;//回溯for(int i = start; i <= 9; i++) {path.add(i);//添加之后进行回溯判断backtrack(k, remain - i, i + 1, path, result);path.remove(path.size() - 1);}}
}

一个通用的回溯模板


✅ 回溯算法的经典模板(Backtracking Template)

void backtrack(参数...) {if (满足合法解的条件) {// 处理合法结果(加入答案列表等)return;}if (触发剪枝条件) {// 过早结束(比如路径过长、和超了等)return;}for (int i = 起始位置; i <= 边界; i++) {// 做选择路径.add(i);// 递归,进入下一层决策树backtrack(...);// 撤销选择(回溯)路径.remove(路径.size() - 1);}
}

🧠 关键步骤详解:

① 判断合法结果:

if (路径.size() == k && remain == 0)

这个时候你已经找到了一个完整的结果,可以加入答案。


② 剪枝条件(终止非法路径):

if (路径.size() > k || remain < 0)

当路径已经无效(长度超了或者和超了),就不需要继续递归了,直接 return。


③ 遍历所有可能选项:

for (int i = start; i <= 9; i++)

依次尝试选取每一个可能的数字。


④ 做选择:

path.add(i)

当前这个数加入路径。


⑤ 回溯递归:

backtrack(...)

进入下一层决策树。


⑥ 撤销选择(回溯):

path.remove(path.size() - 1)

关键操作:撤回上一次的选择,回到上一步的状态,尝试新的可能。


✅ 常见题目都能用这个套路,比如:

  • 组合问题(如本题)
  • 排列问题(比如 Leetcode 46/47)
  • 子集问题
  • 数独、N皇后、迷宫路径
  • 分割字符串、括号生成…
文章来源:https://blog.csdn.net/coldasice342/article/details/146598914
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/embedded/177712.html

相关文章

禅道品牌全面战略升级:开创项目管理国产化替代新格局

2025年&#xff0c;禅道软件完成企业品牌战略深度升级。此次升级&#xff0c;从产品力、服务力到生态圈构建等方面进行了全面优化&#xff0c;以更智慧的解决方案、更开放的生态布局&#xff0c;更安全的国产化解决方案&#xff0c;助力企业实现从“工具应用”到“价值创造”的…

RAG生成中的多文档动态融合及去重加权策略探讨

目录 RAG生成中的多文档动态融合及去重加权策略探讨 一、RAG生成概述 二、多文档动态融合策略 1. 拼接与分段编码 2. 独立编码与后续融合 3. 基于查询的动态加权 三、检索结果的去重与加权策略 1. 去重策略 2. 加权策略 四、实践中的挑战与思考 五、结语 RAG生成中的…

Vue3.5 企业级管理系统实战(十):面包屑导航组件

1 breadcrumb 组件 1.1 安装插件 path-to-regexp 首先&#xff0c;我们需要安装插件 path-to-regexp&#xff0c;以便在下面的面包屑组件中对路由地址进行解析。 path-to-regexp是一个 JavaScript 库&#xff0c;可将路径字符串转化为正则表达式&#xff0c;广泛用于 Web 开发…

Linux常见使用场景

一、文件查看与内容操作 ​1. cat ​作用&#xff1a;查看文件内容&#xff08;一次性输出全部内容&#xff09;。​常用选项&#xff1a; -n&#xff1a;显示行号。-b&#xff1a;仅对非空行显示行号。 ​示例&#xff1a; cat file.txt # 查看文件内容 cat -n fil…

一文详解QT环境搭建:ubuntu20.4安装配置Qt5

随着软件开发技术的不断进步&#xff0c;跨平台应用程序的需求日益增长&#xff0c;开发者们面临着如何在不同操作系统之间保持代码的一致性和效率的问题。Qt作为一个成熟的跨平台C框架&#xff0c;在这方面提供了卓越的支持&#xff0c;不仅简化了GUI应用程序的创建过程&#…

udp通信(一)

udp通信&#xff08;一&#xff09; 1、udp包的格式 public class UdpData{public byte[] SourcePort new byte[2];public byte[] DestinationPort new byte[2];public byte[] Length new byte[2];//Data.length8;public byte[] Checksum new byte[2];public byte[] Data …

d2025328

一、sql-判断三角形 610. 判断三角形 - 力扣&#xff08;LeetCode&#xff09; 用一下if加上判断条件 select x,y,z,if(xy > z and xz > y and yz > x and x-y < z and x-z < y and y-z < x,Yes,No) as triangle from Triangle 二、按照分类统计薪水 190…

【Python-OpenCV】手势控制贪吃蛇

用手势玩转经典游戏&#xff1a;打造一个手势控制的贪吃蛇 你是否曾经想过&#xff0c;如果能用手势来控制游戏会是什么体验&#xff1f;今天&#xff0c;我要向大家介绍一个有趣的项目——手势控制贪吃蛇游戏。这个项目结合了计算机视觉和经典游戏&#xff0c;让你可以通过简单…