代码随想录_回溯_leetcode77 216 17

news2024/11/18 3:49:11

leetcode 77. 组合

77. 组合

给定两个整数 n 和 k,返回范围 [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]]

代码 

// leetcode 77. 组合
//本题可以使用回溯算法来求解,具体实现如下:
//从 1 到 n 中选取一个数,加入到 path 中。
//当 path 中元素个数达到 k 时,回溯到上一层,将 path 中最后一个元素弹出
//每次将一个数加入到 path 中时,只能从当前数的下一个数开始选择,不能选择之前已经选择的数
class Solution {
public:
	vector<vector<int>> result;
	vector<int> path;
	void backtrack(int n, int k, int start)
	{
		if (path.size() == k)
		{
			result.push_back(path);
			return;
		}

		//for (int i = start; i <= n; ++i)   // ->
		//for (int i = start; i <= n && n - i + 1 + path.size() >= k; ++i)//这里可以剪枝 如果后面没有那么多数凑成k个就没必要继续遍历树的结点了
		for (int i = start; i <= n - k + 1 +path.size(); ++i)
		{
			path.push_back(i);
			backtrack(n, k, i + 1);
			path.pop_back();
		}
	}
	vector<vector<int>> combine(int n, int k) {
		backtrack(n, k, 1);
		return result;
	}
};

leetcode 216.组合总和III

216. 组合总和 III

找出所有相加之和为 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,没有有效的组合。

 代码

// leetcode 216.组合总和III
// 和之前的一样,使用回溯函数来解决
// path 存放遍历树的结点
// 只不过终止条件变成 path.size() == k && sum == n
class Solution {
public:
	int sum = 0;
	vector<int> path;
	vector<vector<int>> result;
	
	void backtrack(int k, int n, int start)
	{
		if (path.size() == k && sum == n)
		{
			result.push_back(path);
			return;
		}
		if (sum > n)
		{
			return;
		}
		//for (int i = start; i <= 9; ++i) // 剪枝
		for(int i = start; i <= path.size() + 10 - k; ++i)
		{
			path.push_back(i);
			sum += i;
			backtrack(k, n, i + 1);
			sum -= i;
			path.pop_back();
		}
	}

	vector<vector<int>> combinationSum3(int k, int n) {
		backtrack(k, n, 1);
		return result;
	}
};

leetcode 17.电话号码的字母组合

17. 电话号码的字母组合

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

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

示例 1:

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

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

 代码

// leetcode 17.电话号码的字母组合
// 和之前的一样,使用回溯函数来解决
// 和组合问题完全一样
class Solution {
public:
    const string letterMap[10] = {
    "", // 0
    "", // 1
    "abc", // 2
    "def", // 3
    "ghi", // 4
    "jkl", // 5
    "mno", // 6
    "pqrs", // 7
    "tuv", // 8
    "wxyz", // 9
    };
    string path;
    vector<string> result;
    
    void backtrack(string digits, int index)
    {
        if (path.size() == digits.size())
        {
            result.push_back(path);
            return;
        }
        int num = digits[index] - '0';
        string letters = letterMap[num];
        for (int i = 0; i < letters.size(); ++i)
        {
            path.push_back(letters[i]);
            backtrack(digits, index + 1);
            path.pop_back();
        }
    }

	vector<string> letterCombinations(string digits) {
        if (digits.size() == 0)
        {
            return result;
        }
        backtrack(digits, 0);
        return result;
	}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

促进创新成果高质量发展,华秋“戴上举劳模和工匠人才创新工作室”成立!

4月14日&#xff0c;为充分发挥劳模和工匠人才、工会先进集体和个人示范引领作用&#xff0c;树立典型、鼓励先进&#xff0c;全面推进福田区劳模和工匠人才创新工作室创建和福田区工会组织建设工作&#xff0c;深圳市福田区2023年劳模和工匠人才创新工作室现场交流会在新一代产…

【SAS应用统计分析】软件的基本操及SAS数据集的整理

声明&#xff1a;本文内容来自网络&#xff0c;如有侵权请联系删除。本文还参照了B站up主庄7的课程内容【公开课】数据分析与SAS【15课】 目录 实验背景 实验步骤 步骤一&#xff1a;了解SAS系统的主要窗口及其功能。 步骤二&#xff1a;运行如下程序 语法规则&#xff1a…

vue-过滤器

vue允许定义过滤器&#xff0c;对于一些文本常见格式化。过滤器可以用在两个地方 -&#xff08;1&#xff09;v-bind 表达式 -&#xff08;2&#xff09;{{}}插值表达式 使用&#xff1a;使用过滤器&#xff1a;{{ xxx | 过滤器名}} 或 v-bind:属性 "xxx | 过滤器名"…

Day952.如何降低认知负载 -遗留系统现代化实战

如何降低认知负载 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是 关于如何降低认知负载的内容。 认知负载。这个看似与软件开发毫无瓜葛的知识&#xff0c;实际上却决定了软件系统的成败。 因此在遗留系统现代化中&#xff0c;把“以降低认知负载为前提”作为首要原则…

设计模式-结构型模式之适配器模式(Adapter)

结构型模式简介 结构型模式(Structural Pattern)描述如何将类或者对 象结合在一起形成更大的结构&#xff0c;就像搭积木&#xff0c;可以通过 简单积木的组合形成复杂的、功能更为强大的结构。 结构型模式可以分为类结构型模式和对象结构型模式&#xff1a; 类结构型模式关心类…

Springboot整合redis实现缓存

此次笔记是在实现了数据库的增删改查操作的基础上进行的&#xff0c;因此需要准备数据库、数据表&#xff0c;以及实现相对应的服务层、持久层、控制层。可参考之前的笔记Spring Boot整合 druid、Mybatis-plus 一、Redis安装 Redis 是完全开源免费的&#xff0c;遵守BSD协议&…

【每日一短语】对(某人)吹毛求疵

1、短语及释义 get all sensitive on sb. 释义&#xff1a; 对某人吹毛求疵。 sensitive: 敏感的&#xff0c;引申为“事多的”&#xff0c;“爱挑刺的”。 2、示例及出处 美剧&#xff1a;《摩登家庭》第4季第7集 Modern Family, Season 4 Episode 7 Jay Pritchett: Don’t g…

中医诊所一定要去尝试软文营销,效果简直不要太好

中医诊所是一种传统的医疗机构&#xff0c;随着互联网时代的发展&#xff0c;软文营销已经成为了中医诊所宣传推广的一种重要方式。通过撰写高质量的软文&#xff0c;中医诊所可以提升品牌知名度、增加患者数量、提高医疗服务质量等方面取得良好的效果。今天结合我10年营销经验…

INDEMIND双目惯性模组运行实时ORB-SLAM3教程

现在实验室视觉SLAM已经不够满足&#xff0c;所以需要多模态融合&#xff0c;正巧购入高翔博士推荐的INDEMIND双目惯性模组&#xff0c;根据官方例程在中使用ros接入ORB-SLAM3INDEMIND的双目鱼眼imu模组&#xff0c;这回有SDK及ORB-SLAM3安装过程中的各种常见性问题解决方法及安…

Boost的安装

过程 boost是一个非常重要的东西&#xff0c;是对C函数库的扩展&#xff0c;非常得不错&#xff0c;是第三方扩展&#xff0c;不过不是一般的第三方&#xff0c;是C标准委员会工作组成员发起的。 通过vs命令工具进入boost目录 执行bootstrap.bat命令 开始安装 b2.exe instal…

JavaScript经典教程(二)-- CSS基础部分

179&#xff1a;HTML基础部分&#xff08;元素分类、特性、特殊元素等&#xff09; — 补充 1、盒子模型 定义&#xff1a;一个元素在页面中所占的位置大小&#xff0c;叫盒子模型。 包含的样式&#xff1a;即影响元素大小的样式&#xff1a; width、height、margin、padding…

使用MyBatis实现关联查询

文章目录 一&#xff0c;查询需求&#xff08;一&#xff09;针对三张表关联查询&#xff08;二&#xff09;按班级编号查询班级信息&#xff08;三&#xff09;查询全部班级信息 二&#xff0c;创建数据库表&#xff08;一&#xff09;创建教师表&#xff08;二&#xff09;创…

云计算中的自动化运维技术及其实践

引言 随着云计算技术的快速发展&#xff0c;云计算成为了企业数据中心的新生态&#xff0c;提供了更加灵活、高效、安全的 IT 基础设施和应用服务&#xff0c;让企业能够更加专注于业务创新和变革。但是&#xff0c;云计算的快速发展也带来了新的安全挑战&#xff0c;尤其是在…

达摩院开源工业级说话人识别模型CAM++

近日&#xff0c;达摩院正式向公众开源工业级说话人识别通用模型CAM&#xff0c;兼顾准确率和计算效率&#xff0c;训练labels类别达20万&#xff0c;每类含20&#xff5e;200条梅尔频谱特征。当前该模型已上线Modelscope魔搭社区&#xff0c;后续将陆续开源针对各场景优化的工…

TCP协议三次握手过程分析

TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议&#xff0c;提供可靠的连接服务&#xff0c;采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结…

Vue3技术4之watch监视属性、watch时value问题

Vue3技术4 watch监视属性watch监视ref定义的数据情况一&#xff1a;监视ref所定义的一个响应式数据App.vueDemo.vue 情况二&#xff1a;监视ref所定义的多个响应式数据App.vueDemo.vue 添加immediate属性Demo.vue watch监视reactive定义的数据情况一&#xff1a;监视reactive所…

直播带货冲击实体生意,杭州四季青打响禁止直播带货第一枪

最近&#xff0c;“杭州四季青部分市场禁止直播”的话题冲上热搜。 身处“直播电商之城”杭州的“中国服装行业第一街”杭州四季青的部分市场&#xff0c;打响了“驱逐直播第一枪”&#xff01; 杭州四季青部分市场内为什么要明令禁止直播&#xff0c;直播卖货对实体商户带来了…

华锐3d虚拟数字人提供哪些智能化服务?

虚拟数字人的诞生是互联网时代的产物&#xff0c;它的出现为数字化经济提供了全新解决方案。数字化技术和网络使人类得以进入以“智能机器数据算法”为主线的新生态之中。 广州华锐互动作为专业的AI虚拟数字人开发商&#xff0c;拥有成熟的技术团队和一流的解决方案&#xff0…

零售数据分析操作篇15:用总聚合做销售分析

上一讲讲了内存计算筛选&#xff0c;又可称之为自定义计算成员筛选&#xff0c;即当某列是通过自定义计算成员得到的时候&#xff0c;还要想利用其作为筛选条件&#xff0c;就需要用到自定义计算成员筛选功能。 上一讲还给大家出了道作业&#xff0c;就是&#xff1a;想知道哪…

RHCE-DNS服务器

主机名称解析服务器配置 要求&#xff1a; 1、建立DNS服务器&#xff0c;负责解析的域为openedu.com&#xff1b; 建立DNS首先需要在服务器端配置主配置文件&#xff1a; &#xff08;1&#xff09;临时关闭防火墙和selinux&#xff1a;systemctl stop firewalld&#xff1b;…