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

news/2024/11/15 6:08:26/

找出所有相加之和为 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/news/1435474.html

相关文章

labview中循环停止事件的深入研究

1.错误用法 第一次值事件运行的时候空白按钮给的F值&#xff0c;第二次值事件运行的时候空白按钮给的T值&#xff0c;这时循环才真正结束。 2.正确用法之一 赋值和值改变事件从同时进行变成按顺序执行。 3.正确用法之二 值事件发生以后超时事件将T值赋值给结束条件&#xff…

文件包含漏洞基础

php 中的文件包含函数&#xff1a; incude &#xff1a; require incude_once require_once 为了减少重复性代码的编写&#xff1b; 任意后缀的文件当中只要存在 php 代码就会被当作 php 执行&#xff1b; 本质&#xff1a;由于包含的文件不可控&#xff0c;导致文件包含…

深入理解 Srping IOC

什么是 Spring IOC&#xff1f; IOC 全称&#xff1a;Inversion of Control&#xff0c;翻译为中文就是控制反转&#xff0c;IOC 是一种设计思想&#xff0c;IOC 容器是 Spring 框架的核心&#xff0c;它通过控制和管理对象之间的依赖关系来实现依赖注入&#xff08;Dependenc…

CMakeLists.txt中如何添加编译选项?

1. 引子 编译器有多种可供选择&#xff0c;如g、c、clang等&#xff0c;如下以c作为示例。 2. 使用CMAKE_CXX_FLAGS添加编译选项 在Makefile中可能用类似如下的指令来添加编译选项&#xff1a; /usr/bin/c -Wall -Wextra -Wno-sign-compare -Wno-unused-variable -Wno-unuse…

创建第一个Vue3项目时遇到的报错及处理

其实主要就是针对命令&#xff1a;npm init vuelatest 的报错处理 受限自己电脑本身已经安装了node&#xff0c;npm&#xff0c;在环境搭建时&#xff0c;遇到了报错&#xff0c;如下&#xff1a; 我以为是这是个很简单的问题&#xff0c;看起来是npm的版本过低&#xff0c;升…

JavaScript、Java、C#标记过时方法

JavaScript、Java、C#标记过时方法 在JavaScript、Java和C#中&#xff0c;可以使用特定的注解或标记来表示一个方法是不推荐的&#xff0c;以便在使用该方法时发出警告或提示。虽然没有专门用于标记不推荐方法的内置标记&#xff0c;但是可以结合使用deprecated、[Obsolete]等…

excel一列同乘同一个数

excel一列同乘同一个数 第一种方法&#xff08;excel本身功能&#xff09; 在空白区域输入要乘以的数&#xff0c;比如0.5 右键选择复制 选中需要乘以的单元格&#xff0c;选择性粘贴 点击乘&#xff0c;选择确定 删除0.5后也不会改变值 第二种方法&#xff08;方方格子…

STM32玩转物联网实战篇:5.ESP8266 WIFI模块MQTT通信示例详解

1、准备开发板 开发板功能区分布图 开发板俯视图 2、实验讲解 在之前的章节中&#xff0c;已经讲解过了MQTT的通讯原理和组包过程&#xff0c;现在开始手把手的教大家用代码来实现连接MQTT平台以及数据的交互&#xff0c;实际上这篇文章已经拖更接近两年了&#xff0c;非常…