当前位置: 首页 > news >正文

【代码随想录二刷】Day24-回溯-C++

代码随想录二刷Day24

今日任务

理论基础
77.组合
语言:C++

理论基础

  1. 解决的问题
    ① 组合问题:不考虑顺序
    ② 切割问题
    ③ 子集问题
    ④ 排列问题:考虑顺序
    ⑤ 棋盘问题:N皇后,解数独
  2. 回溯法三部曲
    ① 回溯函数模板返回值以及参数
    函数名:backtracking
    返回值:void
    参数:先写逻辑,再确定需要什么参数
    ② 回溯函数终止条件:搜索到叶子节点
    ③ 回溯搜索的遍历过程
  3. for循环是横向遍历,backtracking(递归)是纵向遍历
  4. 回溯模板
void backtracking(参数){if(终止条件){存放结果;return;}for(选择:本层集合中的元素(树中节点孩子的数量就是集合的大小)){处理节点;backtracking();回溯,撤销处理结果;}
}

77. 组合

链接:https://leetcode.cn/problems/combinations/

class Solution {
public:vector<vector<int>> res;vector<int> combination;//curLen没有必要,直接combination.size()即可void backtracking(int n, int k, int cur, int curLen){if(curLen == k){res.push_back(combination);return;}for(int i = cur; i <= n; i++){combination.push_back(i);backtracking(n, k, i + 1, curLen + 1);combination.pop_back();}}vector<vector<int>> combine(int n, int k) {backtracking(n, k, 1, 0);return res;}
};

剪枝优化

class Solution {
public:vector<vector<int>> res;vector<int> combination;void backtracking(int n, int k, int cur){if(combination.size() == k){res.push_back(combination);return;}//循环终止条件优化for(int i = cur; i <= n - (k - combination.size()) + 1; i++){combination.push_back(i);backtracking(n, k, i + 1);combination.pop_back();}}vector<vector<int>> combine(int n, int k) {backtracking(n, k, 1);return res;}
};

在这里插入图片描述

可以看到剪枝优化后效率有了很大提升
在这里插入图片描述

http://www.lryc.cn/news/18556.html

相关文章:

  • Kubernetes中YAML 文件简介
  • 骨传导耳机是怎么发声的,骨传导耳机值得入手嘛
  • 会声会影2023官方新功能介绍
  • vue:pdf.js使用细节/隐藏按钮/设置、获取当前页码/记录阅读进度/切换语言(国际化)
  • RocketMQ实现延迟队列精确到秒级实现
  • 线性数据结构:数组 Array
  • 大数据开发-Hive
  • 《程序员新声》-Tech Lead 如何带领团队
  • 每日算法面试题
  • 高质量前端之自动化测试
  • 2023不伤人脉的全新商城分销,一劳永逸的消费分红
  • 【代码随想录训练营】【Day21】第六章|二叉树|530.二叉搜索树的最小绝对差|501.二叉搜索树中的众数|236. 二叉树的最近公共祖先
  • leaflet 导出图片,打印图片(A4横版或竖版)
  • Java面向对象:继承特性的学习
  • 问答系统(QA)调研
  • 商务租车的三大优势吸引企业以租代购
  • 蓝桥杯的比赛流程和必考点
  • 【数据结构】红黑树
  • 从C++的角度理解C#的Event
  • 商城进货记录交易-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)
  • 【正点原子FPGA连载】第十七章双核AMP实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 内存管理框架---页(一)
  • 华为OD机试真题Python实现【流水线】真题+解题思路+代码(20222023)
  • 「JVM 编译优化」Graal 编译器
  • 蓝牙标签操作指南
  • 嵌入式 Linux Shell编程
  • Web前端学习:一
  • SpringBoot集成Redis实现分布式会话
  • 2023年关于身份安全的4 个预测
  • Linux期末考试应急