hot100 -- 回溯(上)
目录
🍞科普
🌼全排列
AC DFS
🚩子集
AC DFS
🎂电话号码的字母组合
AC DFS
🌼组合总和
AC DFS
🍞科普
忘记 dfs 的,先看看这个👇
DFS(深度优先搜索)8种题型_dfs典型问题-CSDN博客
🌼全排列
46. 全排列 - 力扣(LeetCode)
AC DFS
排列型枚举哦~
坑
vector 中 push_back 和 [] 下标访问是不一样的
push_back() 是往末尾加入元素,vector 大小会自动增加
而 [] 是直接改变 vector 某个位置的元素
如果你先 ret[i] = count[i]; 然后 ret.pop_back(); 多次循环后,vector 为空,此时再访问就会报错空指针 Null Pointer 错误

时间 O(n * !n),空间 O(n)
class Solution {
private:vector<vector<int>> ans;vector<int> ret; // 临时答案bool vis[7]; // 标记数组--需要回溯void dfs(vector<int>& nums, int count) {int n = nums.size();// 递归出口if (count == n) {ans.push_back(ret);return;}// 遍历每个位置for (int i = 0; i < n; ++i) {if (vis[i] == 0) {ret.push_back(nums[i]); // 加入答案数组vis[i] = 1; // 标记dfs(nums, count + 1); // 递归vis[i] = 0; // 取消标记ret.pop_back(); // 取消标记}}}public:vector<vector<int>> permute(vector<int>& nums) {\dfs(nums, 0);return ans;}};
🚩子集
78. 子集 - 力扣(LeetCode)
指数型枚举哦~
AC DFS
只有 选 / 不选 两种
时间 O(n * 2^n),空间 O(n)
class Solution {
private:vector<vector<int>> ans;vector<int> ret; // 临时答案
public:void dfs(vector<int>& nums, int count) {int n = nums.size();// 递归出口if (count == n) {ans.push_back(ret);return;}// 选 OR 不选// 选ret.push_back(nums[count]); // 类似标记dfs(nums, count + 1); // 递归ret.pop_back(); // 类似取消标记// 不选dfs(nums, count + 1);}vector<vector<int>> subsets(vector<int>& nums) {dfs(nums, 0);return ans;}
};
🎂电话号码的字母组合
17. 电话号码的字母组合 - 力扣(LeetCode)
AC DFS
空数组是 {},而不是 [],编译器看不懂这种 lambda 表达式
本题不要标记,因为,比如 "222",是可以取 "aaa" 的

3 个字母的数字输入 m 个,4 个字母的输入 n 个
时间 O(3^m * 4^n) -- 遍历每一种字母组合
/*
1) n 个数字, 每个数字取 1 个字母, 共取出 n 个字母
2) 取出的 n 个字母,按顺序组合起来 -- O(1)
*/
class Solution {
private:string ret; // 临时答案vector<string> ans;string num_alpha[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};// 已选 count 个数字void dfs(string digits, int count) {int n = digits.size();if (count == n) {ans.push_back(ret);return;}int num = digits[count] - '0'; // 当前数字string now = num_alpha[num]; // 当前字符串// 取一个字母for (int i = 0; i < now.size(); ++i) {ret.push_back(now[i]); // 插入字母dfs(digits, count + 1); // 递归ret.pop_back(); // 回溯时,便于填充其他字母}}public:vector<string> letterCombinations(string digits) {// 特判空字符串, 返回空数组, 而不是包含空字符串的数组 [""]if (digits == "")return {};dfs(digits, 0);return ans;}
};
🌼组合总和
39. 组合总和 - 力扣(LeetCode)
AC DFS
1)指数型枚举的前提下,一个数字可以 “无限制重复” 被选取
2)还要考虑到,这题是 组合 问题,相同组合不同排列,视为同一种结果
3)分两种情况讨论,选 / 不选,注意参数的不同
class Solution {
private:vector<vector<int>> ans;vector<int> ret; // 临时答案// num - candidates[i], num == 0 得到一个结果// 剩余 num, 第 start 个数字void dfs(vector<int>& candidates, int num, int start) {int n = candidates.size();// 递归出口if (start >= n) return;// 一种结果if (num == 0) {ans.push_back(ret);return;}// 选(当前数字)// 不超过 targetif (num - candidates[start] >= 0) {ret.push_back(candidates[start]);dfs(candidates, num - candidates[start], start); // 选当前数字ret.pop_back(); // 恢复现场}// 不选(当前数字)dfs(candidates, num, start + 1); // 递归下一个}
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {dfs(candidates, target, 0); // 剩余 target, 第 0 个数字开始return ans;}
};相关文章:
hot100 -- 回溯(上)
目录 🍞科普 🌼全排列 AC DFS 🚩子集 AC DFS 🎂电话号码的字母组合 AC DFS 🌼组合总和 AC DFS 🍞科普 忘记 dfs 的,先看看这个👇 DFS(深度优先搜索…...
5.24数据库作业
考虑如下关系模式R(A,B.C.D,E,F)上的函数依赖集F: {A→BCD,BC→DE,B→D,D→A} 1、计算B的闭包。 2、(使用Armstrong公理)证明AF是超码。 3、计算上述函数依赖集F的正则覆盖;给出你的推导的步骤并解释。 4、基于正则覆盖࿰…...
go-zero 实战(5)
引入Prometheus 用 Prometheus 监控应用 1. 用 docker 启动 Prometheus 编辑配置位置,我将 prometheus.yaml 和 targets.json 文件放在了 /opt/prometheus/conf目录下 prometheus.yaml global:scrape_interval: 15s # 抓取间隔evaluation_interval: 15s # 评估…...
Python异常处理:打造你的代码防弹衣!
Hi,我是阿佑,上文咱们讲到——揭秘Python的魔法:装饰器的超能力大揭秘 ♂️✨,阿佑将带领大家通过精准捕获异常、使用with语句和上下文管理器、以及异常链等高级技巧来增强代码的健壮性。就像为代码穿上防弹衣,保护它…...
Linux——进程与线程
进程与线程 前言一、Linux线程概念线程的优点线程的缺点线程异常线程用途 二、Linux进程VS线程进程和线程 三、Linux线程控制创建线程线程ID及进程地址空间布局线程终止线程等待分离线程 四、习题巩固请简述什么是LWP请简述LWP与pthread_create创建的线程之间的关系简述轻量级进…...
ping 探测网段哪些地址被用
#!/bin/bash# 遍历192.168.3.1到192.168.3.254 for i in {1..254} doip"192.168.3.$i"# 对每个IP地址进行三次ping操作if ping -c 3 -W 1 $ip > /dev/null 2>&1thenecho "$ip: yes"fi done$ sh test.sh 192.168.3.1: yes 192.168.3.95: yes 192.…...
OSPF问题
.ospf 选路 域内 --- 1类,2类LSA 域间 --- 3类LSA 域外 --- 5类,7类LSA --- 根据开销值的计算规则不同,还分为类型1和类型2 ospf 防环机制 区域内防环:在同一OSPF区域内,所有路由器通过交换链路状态通告ÿ…...
asgasgas
asdgasdgsa...
Go语言实现人脸检测(Go的OpenCV绑定库)
文章目录 OpenCVGithub官网安装环境变量 Go的OpenCV绑定库Github文档安装搜索视频设备ID显示视频检测人脸 OpenCV Github https://github.com/opencv/opencv/ 官网 https://opencv.org/ 安装 brew install opencv brew upgrade opencv安装目录 cd /usr/local/opt/opencv…...
springboot中线程池的使用
一、概念 线程池就是将多个线程对象放入一个池子里面,例如一个池塘,线程池就是这个池塘,池塘里面的鱼就是线程池中的多个线程对象。1. 每一个线程,在一段时间内只能执行一个任务。2. 线程池中的各个线程是可以重复使用的。 二、创…...
ubuntu20.04 开机自动挂载外加硬盘
文章目录 一、问题描述二、操作1. 查找新添盘符2. 格式化硬盘文件系统3. 挂载硬盘4. 开机自动挂载5. 取消挂载6. 查看挂载的硬盘信息 一、问题描述 因电脑使用一段时间后自身硬盘不足,需外加硬盘使得电脑自动识别加载。 二、操作 1. 查找新添盘符 sudo blkid自己…...
5.18 TCP机械臂模拟
#include <netinet/tcp.h>//包含TCP选项的头文件 #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <linux/input.h>//读取输入事件 #include <sys/types.h> #include <sys/stat.h&…...
linux---线程控制
线程和进程 以前我们要同时跑多个程序,可以通过fork()多个子进程,然后通过系统函数进行程序的替换,但是创建进程代价大,不仅要拷贝一份父进程的地址空间,页表,文件表述符表等。但是线程不需要因为是进程的…...
低代码开发:拖拽式可视化构建工业物联网系统
什么是低代码? 低代码(Low Code)是一种可视化的软件开发方法,通过最少的手动编码可以更快地交付应用程序。低代码平台的图形用户界面和拖放功能可自动执行开发过程的各个方面,从而消除对传统计算机编程方法的依赖。 什么是低代码平台&#…...
【撸源码】【ThreadPoolExecutor】线程池的工作原理深度解析——上篇
1. 前言 线程池这块,作为高频面试题,并且实际使用场景巨多,所以出了这篇文章,一块来研究一下线程池的实现原理,运行机制,从底层深挖,不再局限于面试题。 2. 线程池概览 2.1. 构造器 线程池总…...
webpack 学习之 五大核心
为什么用 webpack webpack 官网传送门 … 官网:webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。总结:汇总所有模块…...
Android逆向抓包技巧 - Hook 底层通信
一,请求的本质 平时开发使用的 http 或 https 均属于应用层的协议,其本质都会调用 TCP 发送请求。 例如:你在 Python 中使用 requests 模块发送一个 http 请求,其底层就是使用 socket 模块 + TCP 实现发送的请求。 import requestsres = requests.get("http://wiki…...
深入解析力扣162题:寻找峰值(线性扫描与二分查找详解)
❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…...
模板方法及设计模式——Java笔记
模板方法及设计模式 抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。 解决的问题: 当功能内部一部分实现是确定的,另一…...
K8S认证|CKA题库+答案| 11. 创建PVC
11、创建PVC 您必须在以下Cluster/Node上完成此考题: Cluster Master node Worker node ok8s master …...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
