day-24 代码随想录算法训练营(19)回溯part01

news2025/1/15 6:48:21

77.组合

思路一:回溯相当于枚举,所以我们遍历1-n的每一个数字,然后在遍历第i位的同时递归出第i+1~n位的组合结果,跟树的形式相似。

  •  如上图所示,当长度为k时,即退出递归
  • 可对遍历到第i位以及剩下位数与k进行比较进行一个剪枝(比如遍历到4时,4后面没有数字,不能组成个数为2的组合)
class Solution {
public:
    vector<vector<int>>res;
    void judge(int n,int index,int k,vector<int>&mid){
        if(mid.size()==k){
            res.push_back(mid);
            return;
        }
        for(int i=index;i<=n-(k-mid.size())+1;i++){
            mid.push_back(i);
            judge(n,i+1,k,mid);
            mid.pop_back(); //回溯,不回溯的话无法继续往下
        }
        
    }
    vector<vector<int>> combine(int n, int k) {
        //思路:遍历1-n为index,然后传入进行第k-index-1的组合,使用中间vector保存,当vector的size==k时加入res
        vector<int>mid;
        judge(n,1,k,mid);
        return res;
    }
};

216.组合总和III

分析:和上一题如出一辙,只是多加了一个判断总和,不过数字固定到1-9
class Solution {
public:
    vector<vector<int>>res;
    vector<int>mid;
    void backtrace(int k,int n,int sum,int startIndex){
        if(sum>n || mid.size()>k)
            return;
        if(sum==n && mid.size()==k){
            res.push_back(mid);
            return;
        }
        for(int i=startIndex;i<=9-(k-mid.size())+1;i++){
            sum+=i;
            mid.push_back(i);
            backtrace(k,n,sum,i+1);
            mid.pop_back();
            sum-=i;
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        //思路:和77题如出一辙
        backtrace(k,n,0,1);
        return res;

    }
};

17.电话号码的字母总和

画图分析:

 思路一:首先横向递归,对每一个位置的字符串数组进行递归遍历
            其次在递归遍历之前,对该位置的字符串数组进行遍历添加
            在递归遍历数组结束之后,需要回溯删除本数组添加的字符,以便于回溯到上一数组
class Solution {
public:
    vector<string>dists={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    vector<string>res;
    void backtrace(string digits,int start,string&mid){
        if(start==digits.size()){//递归遍历终点
            res.push_back(mid);
            return;
        }
        for(int i=0;i<dists[digits[start]-'0'].size();i++){//纵向遍历
            char midC=dists[digits[start]-'0'][i];
            mid.push_back(midC);
            backtrace(digits,start+1,mid);//横向递归遍历
            mid.pop_back();//回溯
        }
    }
    vector<string> letterCombinations(string digits) {
       if(digits.size()==0) return res;//极端情况
       string mid;
       backtrace(digits,0,mid);
       return res;
    }
};

131.分割回文串

思路:先使用for循环横向遍历,从每一个点截取,并且判断当前截取的字符串 i 是否为回文串
           1.当属于回文串时,把当前字符串加入数组,并且递归往下,从下一个字符开始再次使用for循环横向遍历,判断是否是回文字符
           2.当不属于回文串时,直接返回
 注意终止条件:当在递归过程中开始截取的位置startIndex大于等于原字符串的长度时,表示已经递归到了尽头

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

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

相关文章

耕地单目标语义分割实践——Pytorch网络过程实现理解

一、卷积操作 &#xff08;一&#xff09;普通卷积&#xff08;Convolution&#xff09; &#xff08;二&#xff09;空洞卷积&#xff08;Atrous Convolution&#xff09; 根据空洞卷积的定义&#xff0c;显然可以意识到空洞卷积可以提取到同一输入的不同尺度下的特征图&…

代码随想录 (二)链表

链表 二 移除链表元素 1 没有头结点 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next)…

分割一切模型FastSAM,点哪里分割哪里

分割一切模型FastSAM点哪里分割哪里 VX搜索 《晓理紫》&#xff0c;关注并回复fastsampoint获取核心源码 [晓理紫] 1 效果 2 核心代码 在FastSAM ONNXRuntime部署&#xff0c;FastSAM TensorRT部署分别介绍了FastSAM通过OnnxRuntime以及TensorRT部署&#xff0c;通过点进行选取…

每天一道leetcode:剑指 Offer 64. 求1+2+…+n(中等递归)

今日份题目&#xff1a; 求 12...n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 示例1 输入: n 3 输出: 6 示例2 输入: n 9 输出: 45 提示 1 < n < 10000 题目思路 使用递归…

特训营第二天项目实战案例

防火墙理论知识&#xff08;一定要记得&#xff09; 防火墙的分类 包过滤防火墙 就是在路由器上写ACL 代理防火墙 相当于租房中介 缺点&#xff1a;速度慢 状态检测防火墙 一个数据包到达防火墙以后&#xff0c;如果策略允许通过&#xff0c;则放行。并建立状态化表项。 优…

python让你从【 i茅台 】里解放双手

先看效果 ![青龙面板跑的结果](https://img-blog.csdnimg.cn/15070a54904a4ab9808c66ba7521d6eb.jpeg 接下来直接上源码 ----------------------------------------------------------------------------------- 专栏分割线 -----------------------------------------------…

SCSS 学习笔记 和 vscode下载live sass compiler插件配置

1、下载livelive sass compiler插件并配置 // 在 已有代码 下面 添加下面 代码&#xff0c;一般刚刚下载打开最后一行是&#xff1a;// "liveSassCompile.settings.autoprefix": [],// 所以直接 把下面复制进去保存就行"liveSassCompile.settings.autoprefix&qu…

如何进入电脑主板BIOS命令大全

介绍&#xff1a; 台式机的主板总该知道吧&#xff0c;它其实是一个一堆功能的总成硬件&#xff0c;上面不但有声卡芯片&#xff0c;网卡芯片&#xff0c;还有英特尔或者AMD的、能让CPU运行起来的芯片组&#xff0c;以及你可能听说过的什么南桥北桥什么的。笔记本的也差不多这么…

2023-8-15差分矩阵

题目链接&#xff1a;差分矩阵 #include <iostream>using namespace std;const int N 1010;int n, m, q; int a[N][N], b[N][N];void insert(int x1, int y1, int x2, int y2, int c) {b[x1][y1] c;b[x1][y2 1] - c;b[x2 1][y1] - c;b[x2 1][y2 1] c; }int main…

交通 | NeurIPS论文:深度学习结合LKH启发式算法

编者按 本次解读的文章是《结合深度学习模型与LKH启发式算法来解决旅行商问题》&#xff0c;标题原文为&#xff1a;《NeuroLKH: Combining Deep Learning Model with Lin-Kernighan-Helsgaun Heuristic for Solving the Traveling Salesman Problem》。这篇文章来源于南洋理工…

2023-8-18 判断子序列

题目链接&#xff1a;判断子序列 #include <iostream>using namespace std;const int N 100010;int n, m; int a[N], b[N];int main() {cin >> n >> m;for(int i 0; i < n; i) cin >> a[i];for(int i 0; i < m; i) cin >> b[i];int i …

el-table 多个表格切换多选框显示bug

今天写了个功能&#xff0c;点击左侧的树做判断&#xff0c;一级树节点显示系统页面&#xff0c;二级树节点显示数据库页面&#xff0c;三级树节点显示表页面。 数据库页面和表页面分别有2个el-table ,上面的没有多选框&#xff0c;下面的有多选框 现在出现bug&#xff0c;在…

“维度削减+逻辑回归”:如何使用PCA大幅提升乳腺癌的预测成功率?

一、引言 乳腺癌是女性中最常见的恶性肿瘤之一&#xff0c;也影响着全球范围内许多人们的健康。据世界卫生组织&#xff08;WHO&#xff09;的数据&#xff0c;乳腺癌是全球癌症发病率和死亡率最高的肿瘤之一&#xff0c;其对个体和社会的危害不可忽视。因此&#xff0c;早期乳…

opencv-人脸关键点定位

#导入工具包 from collections import OrderedDict import numpy as np import argparse import dlib import cv2#https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/ #http://dlib.net/files/# 参数 ap argparse.ArgumentParser() ap.add_argument("-p&quo…

【AIGC】 国内版聊天GPT

国内版聊天GPT 引言一、国内平台二、简单体验2.1 提问2.2 角色扮演2.3 总结画图 引言 ChatGPT是OpenAI发开的聊天程序&#xff0c;功能强大&#xff0c;可快速获取信息&#xff0c;节省用户时间和精力&#xff0c;提供个性化的服务。目前国产ChatGPT&#xff0c;比如文心一言&a…

5、css学习5(链接、列表)

1、css可以设置链接的四种状态样式。 a:link - 正常&#xff0c;未访问过的链接a:visited - 用户已访问过的链接a:hover - 当用户鼠标放在链接上时a:active - 链接被点击的那一刻 2、 a:hover 必须在 a:link 和 a:visited 之后&#xff0c; a:active 必须在 a:hover 之后&…

提高批量爬虫工作效率

大家好&#xff01;作为一名专业的爬虫程序员&#xff0c;我今天要和大家分享一些关于提高批量爬虫工作效率的实用技巧。无论你是要批量采集图片、文本还是视频数据&#xff0c;这些经验都能帮助你在大规模数据采集中事半功倍。废话不多说&#xff0c;让我们开始吧&#xff01;…

Netty+springboot开发即时通讯系统笔记(四)终

实时性 1.线程池多线程&#xff0c;把消息同步给其他端和对方用户&#xff0c;其中数据持久化往往是最浪费时间的操作&#xff0c;可以使用mq异步存储&#xff0c;因为其他业务不需要拿着整条数据&#xff0c;只需要这条数据的id进行操作。 2。消息校验前置&#xff0c;放在t…

vue项目预览pdf功能(解决动态文字无法显示的问题)

最近&#xff0c;因为公司项目需要预览pdf的功能&#xff0c;开始的时候找了市面上的一些pdf插件&#xff0c;都能用&#xff0c;但是&#xff0c;后面因为pdf变成了需要根据内容进行变化的&#xff0c;然后&#xff0c;就出现了需要动态生成的文字不显示了。换了好多好多的插件…

时序预测 | MATLAB实现ELM极限学习机时间序列预测(多指标、相关图)

时序预测 | MATLAB实现ELM极限学习机时间序列预测(多指标、相关图) 目录 时序预测 | MATLAB实现ELM极限学习机时间序列预测(多指标、相关图)效果一览基本介绍程序设计学习总结参考资料效果一览 基本介绍 时序预测 | MATLAB实现ELM极