组合总和III(Lc216)——剪枝+回溯

server/2024/10/21 7:47:11/

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

  • 只使用数字1到9
  • 每个数字 最多使用一次 

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

示例 1:

输入: k = 3, n = 7
输出: [[1,2,4]]
解释:
1 + 2 + 4 = 7
没有其他符合的组合了。

示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
解释:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
没有其他符合的组合了。

示例 3:

输入: k = 4, n = 1
输出: []
解释: 不存在有效的组合。
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。

提示:

  • 2 <= k <= 9
  • 1 <= n <= 60

问题简要描述:返回所有的有效组合的列表

细节阐述:

  1.  dfs(i,s),表示当前枚举到数字 i,还剩下和为 s 的数字需要枚举

Java

class Solution {List<List<Integer>> ans = new ArrayList<>();List<Integer> t = new ArrayList<>();int k;    public List<List<Integer>> combinationSum3(int k, int n) {this.k = k;dfs(1, n);return ans;}void dfs(int i, int s) {if (s == 0) {if (t.size() == k) {ans.add(new ArrayList<>(t));}return;}if (i > 9 || i > s || t.size() >= k) {return;}t.add(i);dfs(i + 1, s - i);t.remove(t.size() - 1);dfs(i + 1, s);}
}

 Python3

class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:def dfs(i: int, s: int):if s == 0:if len(t) == k:ans.append(t[:])returnif i > 9 or i > s or len(t) >= k:returnt.append(i)dfs(i + 1, s - i)t.pop()dfs(i + 1, s)t = []ans = []dfs(1, n)return ans        

TypeScript

function combinationSum3(k: number, n: number): number[][] {let ans: number[][] = [];let t: number[] = [];const dfs = (i: number, s: number) => {if (s == 0) {if (t.length == k) {ans.push(t.slice());}return;}if (i > 9 || i > s || t.length >= k) {return;}t.push(i);dfs(i + 1, s - i);t.pop();dfs(i + 1, s);}dfs(1, n);return ans;    
};


http://www.ppmy.cn/server/7614.html

相关文章

P3385 【模板】负环

题目描述 给定一个 n 个点的有向图&#xff0c;请求出图中是否存在从顶点 1 出发能到达的负环。 负环的定义是&#xff1a;一条边权之和为负数的回路。 输入格式 输入的第一行是一个整数 T&#xff0c;表示测试数据的组数。对于每组数据的格式如下&#xff1a; 第一行有两…

Unity 计时任务管理器TimeHandle

前言 项目体量过大时&#xff0c;在很多脚本用到了携程计时或者写在update里面&#xff0c;不方便管理和代码阅读&#xff0c;很容易混淆&#xff0c;所以需要一个计时任务管理器来统一控制计时器模块&#xff0c;便于修改、管理。计时器有很多种写法&#xff0c;我这里写的是适…

代码学习记录49---单调栈

随想录日记part49 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.20 主要内容&#xff1a;今天开始要学习单调栈的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;柱状图中最大的矩形 84.柱状图中最大的矩形 Topic184.柱状图中最大的矩形 题目&…

使用python-can和cantools实现arxml报文解析、发送和接收的完整指南

文章目录 背景一、硬件支持二、环境准备1、python解释器安装2、python库安装 三、 收发案例四、 方法拓展1、canoe硬件调用2、回调函数介绍 结论 背景 在汽车行业中&#xff0c;CAN (Controller Area Network) 总线是用于车辆内部通信的关键技术。arxml文件是一种用于描述CAN消…

什么是持续集成系统?

持续集成&#xff08;Continuous Integration&#xff0c;简称CI&#xff09;是一种软件开发实践&#xff0c;在这种实践中&#xff0c;开发人员会频繁地&#xff08;可能每天多次&#xff09;将代码集成到共享的代码库中。每次代码提交后&#xff0c;自动执行构建和测试流程&a…

Pytorch或Tensorflow 深度学习库安装 (简易版)

Tensorflow 2.X安装 0、 pytorch 支持 conda虚拟环境 cuda 和 cudnn1、创建conda环境2、测试GPU是否可用3、在机器上安装cuda 和 cudnnCUDA 安装cudnn 安装 0、 pytorch 支持 conda虚拟环境 cuda 和 cudnn 如果只用pytorch&#xff0c; 只需在虚拟环境安装cuda 和 cudnn即可&am…

【Hadoop】- YARN概述[6]

目录 一、YARN & Reduce 二、分布式资源调度 - YARN 1、资源调度 2、YARN的资源调度 总结 一、YARN & Reduce MapReduce是基于YARN运行的&#xff0c;即没有YARN “无法” 运行MapReduce程序。 二、分布式资源调度 - YARN YARN&#xff08;Yet Another Resou…

基于 Spring Boot 博客系统开发(一)

基于 Spring Boot 博客系统开发&#xff08;一&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握SprIng Boot 框架及相关技术的使用。&#x1f913;&#x1f913;&#x1f913; 本系统开发所需的环境及相关软件 操作系统&#xff1a;Windows Java…