求职刷题力扣DAY24--回溯算法

devtools/2024/9/23 2:23:40/

1. leetcode.cn/problems/combinations/" rel="nofollow">77. 组合

给定两个整数 nk,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

示例 1:

输入:n = 4, k = 2
输出:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],
]

示例 2:

输入:n = 1, k = 1
输出:[[1]]
代码实现
class Solution:def combine(self, n: int, k: int) -> List[List[int]]:res = []def recur(num, path):if len(path) == k:res.append(path[:])returnif num > n:returnif len(path) + n - num + 1 < k:returnpath.append(num)recur(num + 1, path)path.pop()recur(num + 1, path)recur(1, [])return res

2. leetcode.cn/problems/combination-sum-iii/" rel="nofollow">216. 组合总和 III

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

  • 只使用数字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
没有其他符合的组合了。
代码实现
class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:'''1. 定义全局变量res储存最终的结果2. 定义全局变量path 储存中间的状态'''res = []path = []def back_track(start_index: int, sum_value: int):if len(path) == k:if sum_value == n:res.append(path[:])returnif start_index > 9:return for i in range(start_index, 10):if len(path) + 10 - i < k:return path.append(i) back_track(i + 1, sum_value + i)path.pop()returnback_track(1, 0)return res

3. [leetcode.cn/problems/letter-combinations-of-a-phone-number/" rel="nofollow">电话号码的字母组合](https://leetcode.cn/problems/combination-sum-iii/)

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]
代码实现
class Solution:def letterCombinations(self, digits: str) -> List[str]:'''回溯:1. 全局变量res,储存结果,path保存遍历的路径2. 回溯递归过程中需要有个start_index3. 终止条件判断'''res = []if not digits:return respath = []num_chars_dict = {2:"abc",3:"def",4:"ghi",5:"jkl",6:"mno",7:"pqrs",8:"tuv",9:"wxyz"}def back_track(start_index: int):if start_index == len(digits):res.append("".join(path))returnnum = int(digits[start_index])for char in num_chars_dict[num]:path.append(char)back_track(start_index + 1)path.pop()back_track(0)return res

http://www.ppmy.cn/devtools/53585.html

相关文章

Golang发送邮件性能如何优化?有哪些方法?

Golang发送邮件的认证流程&#xff1f;怎么设置smtp服务器发信&#xff1f; Golang作为一种高效的编程语言&#xff0c;自然也被广泛应用于发送邮件的场景。然而&#xff0c;如何优化Golang发送邮件的性能成为了一个关键问题。AokSend将探讨一些优化方法&#xff0c;以提高Gol…

超详细的selenium使用指南

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 概述 selenium是网页应用中最流行的自动化测试工具&#xff0c;可以用来做自动化测试或者浏览器…

C# WinForm —— 36 布局控件 GroupBox 和 Panel

1. 简介 两个可以盛放其他控件的容器&#xff0c;可以用于把不同的控件分组&#xff0c;一般不会注册事件 GroupBox&#xff1a;为其他控件提供可识别的分组。可通过Text属性设置标题&#xff1b;有边框&#xff1b;没有滚动条&#xff0c;一般用于按功能分组 Panel&#xff…

React@16.x(25)useReducer

目录 1&#xff0c;介绍1.1&#xff0c;Flux 的设计思想 2&#xff0c;实现2.1&#xff0c;引入2.2&#xff0c;实现 useReducer 3&#xff0c;官方实现 1&#xff0c;介绍 这也是官方的一个HOOK&#xff0c;目的是更方便的使用 Redux。 Redux 后续会详细介绍。它的主体思想沿…

QT与VS的区别?使用QT的好处?

Qt 和 Visual Studio (VS) 是两个不同的概念&#xff0c;它们在软件开发领域扮演着不同的角色&#xff1a; Qt&#xff1a; Qt 是一个跨平台的应用程序和用户界面框架&#xff0c;使用 C 编写&#xff0c;支持多种编程语言的绑定。它提供了一套丰富的工具和库&#xff0c;用于…

Redis的安装及详解

1.Redis介绍&#xff1f; 1.1 Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server,远程字典服务器&#xff09;是一个开源免费的&#xff0c;用C语言编写的一个高性能的分布式内存数据库&#xff0c;基于内存运行并支持持久化的NoSQL数据库。是当前最热门的…

洛谷:P5705【深基2.例7】数字反转

1. 题目链接 https://www.luogu.com.cn/problem/P5705 【深基2.例7】数字反转 2. 题目描述 输入一个大于等于100&#xff0c;小于1000的小数点后一位的浮点数&#xff0c;要求把这个数翻转过来 输入&#xff1a;一行一个浮点数 输出&#xff1a;一行一个浮点数 3. 我的思考 …

#QT(QCharts绘制曲线)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;绘制曲线图表 3.记录&#xff1a; 4.代码 pro QT core gui #加入以下代码引入charts QT charts greaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses depre…