代码随想录第二十一天(一刷C语言)|回溯算法组合

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

一、回溯算法

1、种类

排列、组合、分割、子集、棋盘问题

2、回溯步骤

(0)回溯抽象

        回溯法解决的问题均可以抽象为树形结构(N叉树)

(1)回溯函数模板返回值以及参数

        函数返回值一般为void,回溯算的参数一般是先写逻辑,然后需要什么参数,就填什么参数。

(2)回溯函数终止条件
if(条件成立) {存放结果;return;
}
(3)回溯搜索的遍历过程

       回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。

3、与递归对比和效率

回溯与递归方法和步骤类似,回溯是暴力查找,效率不高。

二、组合

思路:C解法参考了ledcode官方题解

lecode题目:https://leetcode.cn/problems/combinations/

AC代码:

int* temp;
int tempSize;int** ans;
int ansSize;void dfs(int cur, int n, int k) {// 剪枝:temp 长度加上区间 [cur, n] 的长度小于 k,不可能构造出长度为 k 的 tempif (tempSize + (n - cur + 1) < k) {return;}// 记录合法的答案if (tempSize == k) {int* tmp = malloc(sizeof(int) * k);for (int i = 0; i < k; i++) {tmp[i] = temp[i];}ans[ansSize++] = tmp;return;}// 考虑选择当前位置temp[tempSize++] = cur;dfs(cur + 1, n, k);tempSize--;// 考虑不选择当前位置dfs(cur + 1, n, k);
}int** combine(int n, int k, int* returnSize, int** returnColumnSizes) {temp = malloc(sizeof(int) * k);ans = malloc(sizeof(int*) * 200001);tempSize = ansSize = 0;dfs(1, n, k);*returnSize = ansSize;*returnColumnSizes = malloc(sizeof(int) * ansSize);for (int i = 0; i < ansSize; i++) {(*returnColumnSizes)[i] = k;}return ans;
}

全篇后记:

        做起来有点蒙,不是很能理解其中的奥妙,希望通过后续的刷题能理清思路。

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

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

相关文章

plist文件在线生成网页配置苹果ios系统ipa文件下载

您可以进入首页—工具箱—plist文件在线制作 您可以进入控制台—plist文件 ●也可以直接访问&#xff1a;咕噜分发内测平台-苹果ios系统应用安卓apk安全漏洞扫描提供商 ●应用名称_包体的bid-下载地址-图标地址 ●如果不知道怎么查看苹果包名 可以通过咕噜分发【工具箱】-【IOS…

基于AT89C51单片机四位加法计算器的设计

1&#xff0e;设计任务 利用AT89C51单片机为核心控制元件,设计一个四位加法计算器&#xff0c;设计的系统实用性强、操作简单&#xff0c;实现了智能化、数字化。 1&#xff09;、通过4*4矩阵键盘输入数字及运算符&#xff1b; 2&#xff09;、可以进行4位十进制数以内的加法…

MyEclipse控制台console不停的自动跳动控制台界面,解决方案

有时候Eclipse启动&#xff0c;控制台console不会自动跳出来&#xff0c;需要手工点击该选项卡才行&#xff0c;按下面的设置&#xff0c;可以让它自动跳出来(或不跳出来)&#xff1a;方法&#xff1a; 一、windows -> preferences -> run/debug -> consol…

【shell】正则表达式和AWK

一.正则表达式 通配符匹配文件&#xff08;而且是已存在的文件&#xff09; 基本正则表达式扩展正则表达式 可以使用 man 手册帮助 正则表达式&#xff1a;匹配的是文章中的字符 通配符&#xff1a;匹配的是文件名 任意单个字符 1.元字符&#xff08;字符匹配&…

API管理:smart-doc 与 新版 torna 集成

使用 docker-compose 搭建 torna 环境 torna 介绍 项目地址&#xff1a;https://gitee.com/durcframework/torna torna 是一个企业接口文档解决方案&#xff0c;目标是让文档管理变得更加方便、快捷。Torna采用团队协作的方式管理和维护项目API文档&#xff0c;将不同形式的文…

发现一个好用的搜索引擎【非凡搜索】无广告

# 非凡搜索&#xff0c;小众、无广告、简洁。号称“不收集、不传播任何个人信息”。 非凡搜索 作为一个程序员&#xff0c;经常需要搜索一下技术资料&#xff0c;在国内大部分搜索引擎中搜索时&#xff0c;往往夹带各种广告或目的不明确的结果&#xff0c;这个搜索引擎无疑是一…

chrome vue devTools安装

安装好后如下图所示&#xff1a; 一&#xff1a;下载vue devTools 下载链接https://download.csdn.net/download/weixin_44659458/13192207?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-download-2%7Edefault%7ECTRLIST%7EPaid-1-13192207…

Clickhouse Join

ClickHouse中的Hash Join, Parallel Hash Join, Grace Hash Join https://www.cnblogs.com/abclife/p/17579883.html https://clickhouse.com/blog/clickhouse-fully-supports-joins-full-sort-partial-merge-part3 总结 本文描述并比较了ClickHouse中基于内存哈希表的3种连接…

申请免费的域名SSL证书

1.&#xff0c;选择SSL证书提供商 首先&#xff0c;您需要选择一个提供免费SSL证书的可信赖服务提供商。比如JoySSL就提供了永久免费版本的SSL证书。 2&#xff0c; 注册账户并登录 在选择了JoySSL&#xff0c;您需要在网站上注册一个账户。完成注册后&#xff0c;使用您的账…

uniapp微信小程序实现地图展示控件

最终实现效果&#xff1a; 地图上展示控件&#xff0c;并可以点击。 目录 一、前言 二、在地图上展示控件信息 点击后可进行绘制面图形 1.使用cover-view将控件在地图上展示 2.设置控件样式&#xff0c;使用好看的图标 3.控件绑定点击事件 一、前言 原本使用的是control…

Linux:服务器管理工具宝塔(bt)安装教程

一、简介 bt宝塔Linux面板是提升运维效率的服务器管理软件&#xff0c;支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等多项服务的管理功能 二、安装 使用 SSH 连接工具&#xff0c;如堡塔SSH终端连接到您的 Linux 服务器后&#xff0c;挂载磁盘&#xff0c;根据系统执…

【EasyExcel】导出excel并支持自定义设置数据行背景颜色等

需求背景&#xff1a; 根据查询条件将列表数据导出&#xff0c;并筛选出满足某个条件的数据&#xff0c;将满足条件的数据的背景颜色设置成黄色。 &#xff08;本文例子如&#xff1a;name出现的次数大于等于2&#xff0c;将相关数据背景颜色都设置为黄色&#xff09; …