代码随想录刷题题Day21

刷题的第二十一天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀
刷题语言:C++
Day21 任务
● 216.组合总和III
● 17.电话号码的字母组合

1 组合总和III

216.组合总和III
在这里插入图片描述
思路:

在[1,2,3,4,5,6,7,8,9]这个集合中找到和为n的k个数的组合

在这里插入图片描述
(1)确定递归函数参数,返回值
返回值:void
参数:目标和n,k,sum(已经收集的元素的总和),startIndex

vector<vector<int>> result;
vector<int>path;
void backtracking(int n, int k, int sum, int startIndex)

(2)确认终止条件

if (path.size() == k) {if (sum == n) result.push_back(path);return;
}

(3)单层搜索过程

path收集每次选取的元素,sum来统计path里元素的总和

for (int i = startIndex; i <= 9; i++) {sum += i;path.push_back(i);backtracking(n, k, sum, i + 1); // 注意i+1调整startIndexsum -= i;// 回溯path.pop_back();// 回溯
}

C++:

class Solution {
public:vector<vector<int>> result;// 存放结果集vector<int> path;// 符合条件的结果void traversal(int n, int k, int sum, int startIndex) {if (path.size() == k) {if (sum == n) result.push_back(path);return;// 如果path.size() == k 但sum != targetSum 直接返回}for (int i = startIndex; i <= 9; i++) {sum += i;// 处理path.push_back(i);// 处理traversal(n, k, sum, i + 1);// 注意i+1调整startIndexsum -= i;// 回溯path.pop_back();// 回溯}}vector<vector<int>> combinationSum3(int k, int n) {traversal(n, k, 0, 1);return result;}
};

剪枝优化:
(1)已选元素总和如果已经大于n,那么往后遍历就没有意义

剪枝的地方可以放在递归函数开始的地方

if (sum > n) return;

(2)for循环的范围也可以剪枝,i <= 9 - (k - path.size()) + 1

剪枝优化C++:

class Solution {
public:vector<vector<int>> result;vector<int> path;void traversal(int n, int k, int sum, int startIndex) {if (sum > n) return;if (path.size() == k) {if (sum == n) result.push_back(path);return;}for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) {sum += i;path.push_back(i);traversal(n, k, sum, i + 1);sum -= i;path.pop_back();}}vector<vector<int>> combinationSum3(int k, int n) {traversal(n, k, 0, 1);return result;}
};

2 电话号码的字母组合

17.电话号码的字母组合
在这里插入图片描述

(1)数字和字母如何映射
(2)用for循环写不出来
(3)输入1 * #按键等等异常情况

思路:

  1. 数字和字母如何映射
    使用map或者定义一个二维数组
const string[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs",// 7"tuv", // 8"wxyz",// 9
};
  1. 回溯法来解决n个for循环的问题
    在这里插入图片描述
    (1)确定回溯函数参数
    参数:digits,index(记录遍历第几个数字)
vector<string> result;
string s;
void backtracking(const string& digits, int index)

(2)确定终止条件

if (index == digits.size()) {result.push_back(s);return;
}

(3)确定单层遍历逻辑
1)首先要取index指向的数字,并找到对应的字符集。
2)然后for循环来处理这个字符集

int digit = digits[index] - '0';
string letters = letterMap[digit];
for (int i = 0; i < letter.size(); i++) {s.push_back(letters[i]);backtracking(digits, index + 1);s.pop_back();
}

C++:

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 s;vector<string> result;void backtracking(const string& digits, int index){if (index == digits.size()) {result.push_back(s);return;}int digit = digits[index] - '0';// 将index指向的数字转为intstring letters = letterMap[digit];// 取数字对应的字符集for (int i = 0; i < letters.size(); i++) {s.push_back(letters[i]);// 处理backtracking(digits, index + 1); // 递归,注意index+1,一下层要处理下一个数字s.pop_back();// 回溯}}vector<string> letterCombinations(string digits) {s.clear();result.clear();if (digits.size() == 0) return result;backtracking(digits, 0);return result;}
};

时间复杂度: O ( 3 m ∗ 4 n ) O(3^m * 4^n) O(3m4n)

m 是对应四个字母的数字个数,n 是对应三个字母的数字个数

空间复杂度: O ( 3 m ∗ 4 n ) O(3^m * 4^n) O(3m4n)


鼓励坚持二十二天的自己😀😀😀

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

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

相关文章

vcomp120.dll缺失怎么解决,vcomp120.dll丢失的详细修复方法分享(总共5种方法)

计算机提示找不到vcomp120.dll&#xff0c;无法继续执行代码的5个解决方法和vcomp120.dll是什么以及vcomp120.dll丢失原因与作用解析 在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到vcomp120.dll&#xff0c;无法继续执行代码”。…

基于Springboot的宠物领养系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的宠物领养系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

嵌入式开发必须学习qt吗?

嵌入式开发必须学习qt吗&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「 嵌入式的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#…

【Linux】定时任务

定时任务常用crontab来定期执行程序。 crontab 基本语法 crontab [-u user] -l # 列出用户cron任务 crontab [-u user] -e # 编辑用户cron任务 crontab [-u user] -r # 移除用户cron任务cron 表达式 # 分 时 日 月 周 执行命令 minute hour day month week command # 示例…

代码随想录算法训练营 | day60 单调栈 84.柱状图中最大的矩形

刷题 84.柱状图中最大的矩形 题目链接 | 文章讲解 | 视频讲解 题目&#xff1a;给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 1 < heights.len…

第六部分 集合论

目录 主要内容 集合的基本概念 集合的基本运算 集合恒等式 初级运算 文氏图 集合的广义并与广义交 广义运算的性质 例1 A{{a},{a,b}} 集合算律 例2 判断下列命题是否为真 例3 设 例4 判断以下命题的真假&#xff0c;并说明理由. 解题思路 主要内容 集合的基本概念 属于、包含…

JavaOOP篇----第十五篇

系列文章目录 文章目录 系列文章目录前言一、有没有可能两个不相等的对象有相同的hashcode二、拷贝和浅拷贝的区别是什么?三、static都有哪些用法?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通…

HarmonyOS4.0系统性深入开发03UIAbility组件详解(中)

UIAbility组件基本用法 UIAbility组件的基本用法包括&#xff1a;指定UIAbility的启动页面以及获取UIAbility的上下文UIAbilityContext。 指定UIAbility的启动页面 应用中的UIAbility在启动过程中&#xff0c;需要指定启动页面&#xff0c;否则应用启动后会因为没有默认加载…

抖音网红罗盘时钟改良版

文章目录 💕效果展示💕代码展示HTML💕效果展示 💕代码展示 HTML <!DOCTYPE html> <html lang=

【BBuf的CUDA笔记】十,Linear Attention的cuda kernel实现解析

欢迎来 https://github.com/BBuf/how-to-optim-algorithm-in-cuda 踩一踩。 0x0. 问题引入 Linear Attention的论文如下&#xff1a; Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention&#xff1a;https://arxiv.org/pdf/2006.16236.pdf 。官方…

微信小程序-textarea组件字数实时更新

一、前言 本文实现的是在小程序中&#xff0c;textarea文本框输入文字后&#xff0c;实时显示文字的字数&#xff0c;获取更好的用户输入体验以及提示。 下图是实现的效果 二、代码实现 2-1、wxml代码 <view style"padding: 30rpx;"><view style"…

MySQL 数据库系列课程 04:MySQL Workbench的安装

Workbench 是 MySQL 官方推出的免费的强大的可视化工具&#xff0c;不熟悉命令行工具的人&#xff0c;可以安装这一款软件&#xff0c;通过编写 SQL 进行数据库中数据的增删改查操作&#xff0c;接下来我们详细说明一下 Workbench 的安装。 一、Windows安装Workbench &#x…

java八股 redis

Redis篇-01-redis开篇_哔哩哔哩_bilibili 1.缓存穿透 2.缓存击穿 逻辑过期里的互斥锁是为了保证只有一个线程去缓存重建 3.缓存雪崩 4.双写一致性 4.1要求一致性&#xff08;延迟双删/互斥锁&#xff09; 延迟双删无法保证强一致性 那么前两步删缓和更新数据库哪个先呢&#xf…

基于Java SSM框架实现实现定西扶贫惠农推介志愿者系统项目【项目源码+论文说明】

基于java的SSM框架实现定西扶贫惠农推介志愿者系统演示 摘要 扶贫工作是党中央、国务院的一项重要战略部署。党政机关定点扶贫是中国扶贫开发战略部署的重要组成部分&#xff0c;是新阶段扶贫开发的一项重大举措&#xff0c;对推动贫困地区经济社会的发展有着积极的意义。 本…

Ethercat“配置从站地址”报文分析(0x0010:0x0011)

基于IgH主站接了3个从站&#xff0c;分析报文。 涉及的从站寄存器&#xff1a;Configured Station Address 0x0010:0x0011。 使用场景举例&#xff1a; IgH启动后&#xff0c;通过“配置从站地址”报文将所有从站地址清零&#xff0c;然后通过APWR指令“配置从站地址”报文&a…

TIA博途Wincc_通过VBS脚本实现电机风扇或水泵旋转动画的具体方法

TIA博途Wincc_通过VBS脚本实现电机风扇或水泵旋转动画的具体方法 前面和大家介绍了通过在PLC中编程,结合HMI的图形IO域实现电机风扇或水泵旋转动画的具体方法,详细内容可参考以下链接: TIA博途Wincc中制作电机风扇或水泵旋转动画的具体方法示例 本次和大家分享通过VBS脚本实…

windows下使用vccode+cmake编译cuda程序

1、在vscode中安装Nsight Visual Studio Code Edition 在vscode中安装插件能够对cuda的代码进行语法检查 2、编写cuda程序 #include <iostream>__global__ void mykernelfunc(){}; int main() {mykernelfunc<<<1,1>>>();std::cout << "hel…

Tiny Object Detection

文章目录 RFLA: Gaussian Receptive Field based Label Assignment for Tiny Object Detection&#xff08;ECCV2022&#xff09;Dynamic Coarse-to-Fine Learning for Oriented Tiny Object Detection&#xff08;CVPR2023&#xff09;TOD-CMLNN&#xff08;2023&#xff09; …

OpenSource - SCM服务管理平台

文章目录 官方网址文档下载版本功能解决了哪些问题使用对象优势Linxu版本scm-dev deb服务列表 Windows版本scm-dev 服务列表scm-all 服务列表scm-jdk 服务列表scm-springboot 精简版本服务列表scm-springboot 服务列表scm-tomcat 服务列表 SCM 截图 官方网址 https://scm.chus…

RabbitMQ入门指南(七):生产者可靠性

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、消息丢失的可能性 1.发送消息时丢失&#xff1a; 2.MQ导致消息丢失&#xff1a; 3.消费者处理消息时消息丢失&#xff1a; 二、生产者可靠性 1.生产者重试机制 2.生产者确认机制 总结 前言 Ra…