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

news2024/11/19 17:21:17

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

一、回溯算法

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 的 temp
    if (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.coloradmin.cn/o/1282942.html

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

相关文章

渗透复现

初步接触 先进行主机发现 nmap 172.16.17.0/24 -p 80 先指定扫描80端口的 nmap 172.16.17.0/24 做的时候&#xff0c;一直没有发现之间有一个输入成了逗号 根据上面的结果&#xff0c;就可以知道了 我们会看到有几个open&#xff0c;应该就是这两个了 就会发现是可以的&…

MVCC是如何保证隔离性的

之前提到了MVCC可以一定程度上避免幻读&#xff0c;那具体MVCC是咋工作的呢&#xff1f; 需要介绍两个机制&#xff1a;read view和聚簇索引的两个隐藏列 read view 这个就是我们理解的快照&#xff0c;有四个字段&#xff0c;本事务id、活跃事务id列表&#xff08;包含自己&…

Biglnteger 和 BigDecimal类 - Java

BigInteger 和 BigDecimal类 1、应用场景 BigInteger 适合保存比较大的整型BigDecimal 适合保存精度更高的浮点型(小数) 2、BigInteger 当编程中需要处理很大的整数&#xff0c;long 不够用&#xff0c;就需要使用 Biglnteger 类。 使用 //创建&#xff1a;和类一样&…

手机传输数据到电脑该怎么操作?安卓、苹果都可以这样操作

安卓手机 你知道安卓手机传输数据到电脑的方法有哪些吗&#xff1f;下面我们就一起来看一看可以使用的一些方法。 采用 USB 数据线 这个方法应该是我们生活中较为常见的方法了&#xff0c;我们只需要使用手机的充电线&#xff0c;将其连接到电脑上&#xff0c;然后手机可能会…

网工学习7-配置 GVRP 协议

7.1GARP概述 GARP(Generic Attribute Registration Protocol)是通用属性注册协议的应用&#xff0c;提供 802.1Q 兼容的 VLAN 裁剪 VLAN pruning 功能和在 802.1Q 干线端口 trunk port 上建立动态 VLAN 的功能。 GARP 作为一个属性注册协议的载体&#xff0c;可以用来传播属性…

医药行业:轻松学会超低温冰箱技能

超低温冰箱在医疗、科研和生物领域中扮演着至关重要的角色&#xff0c;用于存储和保护对温度极为敏感的样品和药品。 然而&#xff0c;由于这些冰箱内的温度波动可能导致样品的损坏&#xff0c;因此对超低温冰箱的监控变得至关重要。 客户案例 医疗研究机构 上海某医疗研究机…

行业分析:全球山药产量约为7603.1万吨

山药味甘&#xff0c;性平。常被认为有健脾、益肺、固肾、涩精等功效。作为食用&#xff0c;山药所含的膳食纤维丰富&#xff0c;相比精细主食&#xff0c;如大米苗条等&#xff0c;更有饱腹感&#xff0c;对于控制食欲和体重有很好的辅助作用。另外&#xff0c;其所含的淀粉酶…

如何在Linux上搭建本地Docker Registry镜像仓库并实现公网访问

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…

万兆多模光模块SFP-10G-SR:高速短距传输的最优选

随着信息技术的发展&#xff0c;企业和个人对数据传输速度和带宽需求不断增加。传统的千兆以太网已经不能满足高速数据传输的要求&#xff0c;因此万兆以太网技术崭露头角。作为万兆以太网中的重要组件之一&#xff0c;万兆多模SFP-10G-SR光模块引起了广泛的关注。本文将介绍万…

Latex去掉参考文献后面的参考文献所在页(去掉参考文献的反向超链接)

如下&#xff1a; 在使用latex插入参考文献的时候&#xff0c;最后面总是会出现这种代号。这是表明的是这条参考文献所在的页码&#xff0c;并且点击之后可以跳转到该页。正式来讲&#xff0c;这个叫超链接的BACKREF。若要去掉&#xff0c;只需要在引用hyperref的时候去掉page…

MYSQL练题笔记-聚合函数-各赛事的用户注册率

一、题目相关内容 1&#xff09;相关的表 2&#xff09;题目 3&#xff09;帮助理解题目的示例&#xff0c;提供返回结果的格式 二、自己初步的理解 有两张不同左右的表&#xff0c;用户表和赛事注册表。然后解题。 1.各种赛事的用户注册百分率 各种赛事的意味着通过contes…

Spring 声明式事务

Spring 声明式事务 1.Spring 事务管理概述1.1 事务管理的重要性1.2 Spring事务管理的两种方式1.2.1 编程式事务管理1.2.2 声明式事务管理 1.3 为什么选择声明式事务管理 2. 声明式事务管理2.1 基本用法2.2 常用属性2.2.1 propagation&#xff08;传播行为&#xff09;2.2.2 iso…

希宝猫罐头怎么样?专业人士告诉你营养好的猫罐头推荐

作为一个6年铲屎官来说&#xff0c;买过的猫罐头可以说是不计其数啦。对于猫罐头品牌选购和喂养相关知识&#xff0c;我还是有点心得的。希宝猫罐头怎么样呢&#xff1f; 希宝猫罐头采用了先进的加工工艺&#xff0c;注重产品的包装和密封性&#xff0c;包装设计比较符合年轻人…

年底了,项目预算怎么创建?9个步骤直接搞定

如果将项目比作一辆汽车&#xff0c;那么预算就是它的燃料。就像汽车需要汽油一样&#xff0c;项目也需要资金和资源来维持运转。而作为项目经理&#xff0c;应该尽量用最有效的方式规划和使用这些资源&#xff0c;使项目按时交付。 项目预算是一项计划&#xff0c;其中详细说…

使用Plex结合cpolar搭建本地私人媒体站并实现远程访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频&#xff0c;已经算是生活中稀松平常的场景了&#xff0c;特别是各…

使用Java语言判断一个数据类型是奇数还是偶数

判断一个数字类型是奇数&#xff0c;还是偶数&#xff0c;只需要引入Scanner类&#xff0c;然后按照数据类型的定义方式进行定义&#xff0c;比较是按照与2进行整除后的结果&#xff1b;如果余数为零&#xff0c;则代表为偶数&#xff0c;否则为奇数。 import java.util.Scann…

学习php中使用composer下载安装firebase/php-jwt 以及调用方法

学习php中使用composer下载安装firebase/php-jwt 以及调用方法 1、安装firebase/php-jwt2、封装jwt类 1、安装firebase/php-jwt composer require firebase/php-jwt安装好以后出现以下文件: 2、封装jwt类 根据所使用的php框架&#xff0c;在指定目录创建 Token.php <?ph…

对小工蚁关于LLM的技术总结+个人思考

LLM能力从何而来&#xff1a; 推理能力&#xff1f;目前还未知晓为何得到结果 斯坦福大学的AI指数 通过种子任务自动生成数据训练LLM 基于self-instruct及175条种子任务生成数据。 LLM大模型如何进行微调&#xff1f; 1.blog/trl-peft.md at main huggingface/blog GitH…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A 需要环境或者解析可以私信 &#xff08;二&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&…