代码随想录第二十二天(一刷C语言)|组合总数电话号码的字母组合

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。

一、组合总数

思路:参考carl文档和视频

1、需要一维数组path来存放符合条件的结果,二维数组result来存放结果集。

2、targetSum  目标和,也就是题目中的n。

3、k 就是题目中要求k个数的集合。

4、sum 为已经收集的元素的总和,也就是path里元素的总和。

5、startIndex 为下一层for循环搜索的起始位置。

ledcode题目:https://leetcode.cn/problems/combination-sum-iii/description/

AC代码:

int* path;
int pathTop;
int** ans;
int ansTop;void backtracking(int targetSum, int k, int sum, int startIndex) {if(pathTop == k) {if(sum == targetSum) {int* tempPath = (int*)malloc(sizeof(int) * k);int j;for(j = 0; j < k; j++)tempPath[j] = path[j];ans[ansTop++] = tempPath;}return;}int i;//从startIndex开始遍历,一直遍历到9for (i = startIndex; i <= 9; i++) {sum += i; // 处理path[pathTop++] = i; // 处理backtracking(targetSum, k, sum, i + 1); // 注意i+1调整startIndexsum -= i; // 回溯pathTop--;; // 回溯}
}int** combinationSum3(int k, int n, int* returnSize, int** returnColumnSizes){//初始化辅助变量path = (int*)malloc(sizeof(int) * k);ans = (int**)malloc(sizeof(int*) * 20);pathTop = ansTop = 0;backtracking(n, k, 0, 1);//设置返回的二维数组中元素个数为ansTop*returnSize = ansTop;//设置二维数组中每个元素个数的大小为k*returnColumnSizes = (int*)malloc(sizeof(int) * ansTop);int i;for(i = 0; i < ansTop; i++) {(*returnColumnSizes)[i] = k;}return ans;
}

二、电话号码的字母组合

思路:参考carl文档和视频

1、定义一个二维数组,例如:string letterMap[10],来做映射。

2、用回溯法解决n个for循环问题

3、需要一个字符串s来收集叶子节点的结果,然后用一个字符串数组result保存起来

lecode题目:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/

AC代码:

char* path;
int pathTop;
char** result;
int resultTop;
char* letterMap[10] = {"", //0"", //1"abc", //2"def", //3"ghi", //4"jkl", //5"mno", //6"pqrs", //7"tuv", //8"wxyz", //9
};
void backTracking(char* digits, int index) {//若当前下标等于digits数组长度if(index == strlen(digits)) {//复制digits数组,因为最后要多存储一个0,所以数组长度要+1char* tempString = (char*)malloc(sizeof(char) * strlen(digits) + 1);int j;for(j = 0; j < strlen(digits); j++) {tempString[j] = path[j];}//char数组最后要以0结尾tempString[strlen(digits)] = 0;result[resultTop++] = tempString;return ;}//将字符数字转换为真的数字int digit = digits[index] - '0';//找到letterMap中对应的字符串char* letters = letterMap[digit];int i;for(i = 0; i < strlen(letters); i++) {path[pathTop++] = letters[i];//递归,处理下一层数字backTracking(digits, index+1);pathTop--;}
}char ** letterCombinations(char * digits, int* returnSize){//初始化path和resultpath = (char*)malloc(sizeof(char) * strlen(digits));result = (char**)malloc(sizeof(char*) * 300);*returnSize = 0;//若digits数组中元素个数为0,返回空集if(strlen(digits) == 0) return result;pathTop = resultTop = 0;backTracking(digits, 0);*returnSize = resultTop;return result;
}

全篇后记:

        今天时间比较少,所以只是做到勉强理解思路。

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

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

相关文章

企业数字化转型应该做什么

以下是通过学习华为数字化转型并结合自身情况引发的学习思考,供大家参考。企业做数字化转型目的是为了赋能业务,因为原有老业务发展了这么多年,好做的都已经做完了,目前已进入了深水区,需要引入新的创新源泉,需要跨界创新,特别是这几年IT技术的发展,需要通过IT进行借力…

Rust多线程任务,发现有些线程一直获取不到锁【已解决】

问题描述 项目中用到rust&#xff0c;其中在多线程中用到了同一个对象的锁&#xff0c;然而发现其中一个线程一直拿不到这个锁。 解决过程 我先是在线程A中加入了sleep方法&#xff0c;这样做的效果就是&#xff0c;比最初好一些&#xff0c;但是拿到锁还是要较长时间&#xf…

动态页面技术的发展与应用

jsp 静态页面&#xff1a;web诞生后的html文档&#xff0c;不论多少次访问都是同一份html文档或者是其他的什么文档&#xff0c;所以说是”静态“的。 虽然js能让页面产生互动&#xff0c;但是不论什么人访问&#xff0c;看到的都是放在服务器的那一份写死的文件/文档activexa…

【Python】Python给工作减负-读Excel文件生成xml文件

目录 ​前言 正文 1.Python基础学习 2.Python读取Excel表格 2.1安装xlrd模块 2.2使用介绍 2.2.1常用单元格中的数据类型 2.2.2 导入模块 2.2.3打开Excel文件读取数据 2.2.4常用函数 2.2.5代码测试 2.2.6 Python操作Excel官方网址 3.Python创建xml文件 3.1 xml语法…

自定义类型:结构体(自引用、内存对齐、位段(位域))

目录 一. 结构体类型的声明和定义 1.1结构体相关概念 1.11结构的声明 1.12成员列表 1.2定义结构体类型变量的方法 1.21先声明结构体类型再定义变量名 ​​​​1.22在声明类型的同时定义变量 1.23直接定义结构类型变量 二、结构体变量的创建、初始化​和访问 2.1结构体…

初探webpack之单应用多端构建

初探webpack之单应用多端构建 在现代化前端开发中&#xff0c;我们可以借助构建工具来简化很多工作&#xff0c;单应用多端构建就是其中应用比较广泛的方案&#xff0c;webpack中提供了loader与plugin来给予开发者非常大的操作空间来操作构建过程&#xff0c;通过操作中间产物…

[二分查找]LeetCode2009 :使数组连续的最少操作数

本文涉及的基础知识点 二分查找算法合集 作者推荐 动态规划LeetCode2552&#xff1a;优化了6版的1324模式 题目 给你一个整数数组 nums 。每一次操作中&#xff0c;你可以将 nums 中 任意 一个元素替换成 任意 整数。 如果 nums 满足以下条件&#xff0c;那么它是 连续的 …

记录 | ssh config免密连接

[适用于 linux 和 mac] 比如 ~/.ssh/config: Host targetHostName 192.168.2.12User rootPort 9990这样每次 ssh target 的时候每次都需要输入密码&#xff0c;比较麻烦 解决办法如下&#xff0c;可让下次不用重新输入密码 # 先要生成 ssh 密钥 ssh-keygen# 配置永久性密码 s…

Java Web——动态Web开发核心-Servlet

1. 官方文档 官方文档地址&#xff1a;Overview (Servlet 4.0 API Documentation - Apache Tomcat 9.0.83) servlet 与 Tomcat 的关系&#xff1a;Tomcat 支持 Servlet Tomcat 是一个开源的 Java 服务器&#xff0c;它主要用来提供 Web 服务&#xff0c;包括 HTTP 请求和响应…

Qt基础之四十:Qt Installer Framework(QtIFW)的编译、使用和实现原理

一.编译 编译环境: 系统:Windows 10 专业版 64位 编译器:Visual Studio 2017 本文编译的是当前最新版本qt-installer-framework 4.6.1 源码下载地址:清华大学开源软件镜像站 解压后可以看到里面自带编译指导文件—INSTALL,INSTALL里明确了以下几点: 1.静态编译Qt Qt版…

Git 合并冲突解决步骤

Git 合并冲突解决步骤 1. 找到并打开冲突文件 定位到发生冲突的文件。可以通过 Git 的命令行输出找到这些文件。例如&#xff1a; pom.xmlsrc/main/java/com/zzm/config/SecurityConfig.javasrc/main/java/com/zzm/service/chat/UserConversationsServiceImpl.javasrc/main/…

EasyExcel写入多个sheet

直接上代码&#xff1a; public static void main(String[] args) {// 设置excel工作簿ExcelWriter excelWriter EasyExcel.write("F:\\excel\\a.xls").build();List<User> userList new ArrayList<>();userList.add(new User("lisi", "…

初始数据结构(加深对旋转的理解)

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/rotate-array/submissions/ 与字…

Android Wifi的扫描机制

Android Wifi 的扫描场景分为下面四种情况&#xff1a; 1.亮屏情况下&#xff0c;在Wifi settings界面&#xff0c;固定扫描&#xff0c;扫描时间为10s。 2.亮屏情况下&#xff0c;在非Wifi settings界面&#xff0c;二进制指数退避扫描&#xff0c;退避&#xff1a;interval…

11.1每日一题(关于函数定义域)

f(x1)&#xff1a;自变量为x&#xff0c;x1为中间变量&#xff0c;所以f(x1)的定义域的取值范围是x的取值范围 f(x)&#xff1a;自变量为x&#xff0c;f(x)的定义域等价于f(x1)中 x1整体的定义域

深度学习记录--logistic回归损失函数向量化实现

前言 再次明确向量化的目的&#xff1a;减少for循环的使用&#xff0c;以更少的代码量和更快的速度来实现程序 正向传播的向量化 对于,用向量化来实现&#xff0c;只需要就可以完成&#xff0c;其中,, ps.这里b只是一个常数&#xff0c;但是依然可以加在每个向量里(python的…

09-命令者模式-C语言实现

命令者模式是一个高内聚的模式&#xff0c; 其定义为&#xff1a; Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.&#xff08;将一个请求封装成一个对象&…

记录 | mac双屏时程序坞跑到副屏的解决方法

mac双屏时程序坞跑到副屏的解决方法&#xff1a; (1) 按下 optioncommandD&#xff0c;开启程序坞 “自动隐藏”&#xff0c;副屏程序坞消失&#xff1b; (2) 鼠标回到主屏&#xff0c;放在主屏正下方中间的边缘不要动&#xff0c;主屏能看到扩展坞出现了&#xff1b; (3) 按…

JDK17的安装与配置

JDK17的安装与配置 下载地址安装步骤配置环境变量验证安装是否成功 下载地址 此jdk17安装的系统是win10系统 https://www.oracle.com/java/technologies/downloads/ 这里选择JDK17进行下载 下载完成之后&#xff0c;显示如下图&#xff1a; 安装步骤 自定义的安装路径&…

测试:测试设计方法

一、等价类划分 等价类划分是一种软件测试方法&#xff0c;它将程序的输入域划分成若干部分&#xff08;子集&#xff09;&#xff0c;然后从每个子集中选取具有代表性的数据作为测试用例。等价类划分旨在确保测试用例的完整性和代表性&#xff0c;同时避免冗余测试。 等价类划…