代码随想录打卡第二十五天
代码随想录–回溯部分
day 24 休息
day 25 回溯第三天
文章目录
- 代码随想录--回溯部分
- 一、力扣93--复原IP地址
- 二、力扣78--子集
- 三、力扣90--子集Ⅱ
一、力扣93–复原IP地址
代码随想录题目链接:代码随想录
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。
例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案
简单来说就是穷举,把一个数组按照规则分成四串,所有的可能性
类似分割回文串,但是需要修改“回文串”的判断逻辑
把切下来的子串用于判断,当其开头不是0且整体在0-255之间,则可以下一步递归,否则不递归
代码如下:
class Solution {
public:vector<string> result;bool isValid(const string s){int num = 0;if (s.size() > 1 && s[0] == '0'|| !s.size()) return false;else {for (int i = 0; i < s.size(); i++) {if (s[i] > '9' || s[i] < '0') return false;num = num * 10 + (s[i] - '0');if (num > 255) { return false;}}if(num > 255 || num < 0) return false;return true;}}void backTracking(string & s, int startIndex, int pointNum){if(pointNum == 3){string temp = string(s.begin() + startIndex, s.end());if(isValid(temp)){result.push_back(s); }return;}for(int i = startIndex; i < s.size(); i ++){string test = string(s.begin() + startIndex, s.begin() + i + 1);if(isValid(test)) {s.insert(s.begin() + i + 1, '.');pointNum ++;backTracking(s, i + 2, pointNum);s.erase(s.begin() + i + 1);pointNum --;}else break;}}vector<string> restoreIpAddresses(string s) {if (s.size() < 4 || s.size() > 12) return result;backTracking(s, 0, 0);return result;}
};
切割字符串这里需要注意,是左闭右开的
所以是startIndex + i + 1
二、力扣78–子集
代码随想录题目链接:代码随想录
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的
子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
非常像力扣77–组合的问题,只不过是k在动态的变化
只要在判断return的条件上修改一下就行了
不再需要判断是否能够加入result中,也不用中断后续的递归,只管让代码运行即可
这样就能做到遍历完整的树,每次回溯都需要把自身加入结果中,不需要判断了
代码如下:
class Solution {
public:vector<int> path;vector<vector<int>> result;void backTracking(vector<int> & nums, int startIndex){result.push_back(path);for(int i = startIndex; i < nums.size(); i ++){path.push_back(nums[i]);backTracking(nums, i + 1);path.pop_back();}}vector<vector<int>> subsets(vector<int>& nums) {backTracking(nums, 0);return result;}
};
输入
nums =[1,2,3]
输出
[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]
从输入输出也能看出回溯的顺序,先是搜索完1向下的一整串,返回后从2继续向下搜索
所以每层都需要记录自己,不然会漏掉
三、力扣90–子集Ⅱ
代码随想录题目链接:代码随想录
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的
子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
不同于子集,这次给的num会存在重复数字,输出要去重
思想和组合总和Ⅲ是一样的,对nums排序,并且通过used数组记录回溯层数
这样判断前一位和后一位是否相同且是否在一层,就可以做到去重复了
代码如下:
class Solution {
public:vector<int> path;vector<vector<int>> result;vector<bool> used;void backTracking(vector<int> & nums, int startIndex){result.push_back(path);for(int i = startIndex; i < nums.size(); i ++){if(i > 0 && nums[i] == nums[i - 1] && !used[i-1]) continue;path.push_back(nums[i]);used[i] = true;backTracking(nums, i + 1);path.pop_back();used[i] = false;}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {sort(nums.begin(), nums.end());used = vector<bool>(nums.size(), false);backTracking(nums, 0);return result;}
};
相关文章:
代码随想录打卡第二十五天
代码随想录–回溯部分 day 24 休息 day 25 回溯第三天 文章目录 代码随想录--回溯部分一、力扣93--复原IP地址二、力扣78--子集三、力扣90--子集Ⅱ 一、力扣93–复原IP地址 代码随想录题目链接:代码随想录 有效 IP 地址 正好由四个整数(每个整数位于 0…...
openharmony上传图片,并获取返回路径
适用条件: openharmony开发 4.0 release版本,对应能力API10 一直不断尝试,一会用官方提供的上传文件,一会用第三方库的axios都不行, 一会报错‘没权限,一会报错’路径错误,还有报错‘401参数错…...
git常用命令及git分支
git常用命令及git分支 git常用命令设置用户签名初始化本地库查看本地库状态将文件添加到暂存区提交到本地库查看历史记录版本穿梭 git分支什么是分支分支的好处分支的操作查看分支创建分支切换分支删除分支合并分支合并冲突 git常用命令 设置用户签名 //设置用户签名 git con…...
c# 依赖注入-服务的生命周期
在 C# 中,依赖注入服务的生命周期指的是在应用程序中管理和控制依赖项注入服务对象的生命周期的方式。常见的生命周期包括瞬态(transient)、作用域(scoped)和单例(singleton)三种。 瞬态&#…...
一站式短视频矩阵开发,高效托管!
短视频矩阵系统源码SaaS解决方案提供全面的开发服务,包括可视化视频编辑、矩阵式内容分发托管以及集成的多功能开发支持。 短视频矩阵:引爆您的数字营销革命 短视频矩阵系统是一套多功能集成解决方案,专为提升在短视频平台上的内容创作、管理…...
实践致知第16享:设置Word中某一页横着的效果及操作
一、背景需求 小姑电话说:现在有个word文档,里面有个表格太长(如下图所示),希望这一个设置成横的,其余页还是保持竖的! 二、解决方案 1、将鼠标放置在该页的最前面闪烁,然后选择“页面”》“↘…...
Leetcode—3011. 判断一个数组是否可以变为有序【中等】(__builtin_popcount()、ranges::is_sorted())
2024每日刷题(144) Leetcode—3011. 判断一个数组是否可以变为有序 O(n)复杂度实现代码 class Solution { public:bool canSortArray(vector<int>& nums) {// 二进制数位下1数目相同的元素就不进行组内排序// 只进行分组// 当前组的值若小于…...
盲盒一番赏小程序:开启惊喜之旅,探索无限创意!
在这个充满无限想象与惊喜的时代,盲盒已成为连接心灵与梦想的奇妙桥梁。为了将这份独特的乐趣与探索精神传递给每一位热爱生活、追求新鲜的你,我们自豪地推出了“盲盒一番赏”小程序——一个集创意、趣味、互动与社交于一体的盲盒新纪元,邀您…...
Linux基础知识之Linux文件系统权限
概述 文件权限控制对文件的访问可以针对文件所属用户、所属组和其他用户可以设置不同的权限权限具有优先级。user 权限覆盖 group 权限,后者覆盖 other 权限 权限:读取、写入和执行 权限 对文件的影响 对目录的影响 r (读取) 可以读取文件的内容 …...
Qt qml详细介绍
一.基本类型 QML的基本类型包括了很多不同的类型,这些类型可以用于定义用户界面元素、属性和信号。以下是一些常用的QML基本类型及其详细介绍: 数值类型:包括整数类型(int、uint、short、ushort等)和浮点数类型&#…...
深度解析:如何优雅地删除GitHub仓库中的特定commit历史
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
JS之短路操作符
短路操作符(Short-circuit Operator)是 JavaScript 中的一个概念,这些操作符同样适用于 TypeScript,因为 TypeScript 是 JavaScript 的类型超集。短路操作符主要包括逻辑“与”(&&)和逻辑“或”&am…...
【Linux】安装PHP扩展-redis
说明 本文档是在centos7.6的环境下,安装PHP7.4之后,安装对应的PHP扩展包redis。 一、下载redis扩展 pecl官方地址:PECL :: The PHP Extension Community Library 下载的版本是:redis-5.3.7.tgz 二、安装redis扩展 1.上传 redis 压缩包到…...
内衣洗衣机怎么选?分享五款人气巅峰机型,选对不选贵
随着科技的不断发展,内衣裤洗衣机成为了家庭必备的家电之一。选择一个好的品牌对于日后的使用体验至关重要。市场上内衣洗衣机型号繁多,究竟哪个牌子好用呢?下面给大家分享五款无论是口碑还是价格,都称得上是公认好用又实惠的内衣…...
OpenMesh入门,安装,运行示例Hello World
安装 环境 win10,qt5 源码下载编译 进入OpenMesh官网OpenMesh官网 https://www.graphics.rwth-aachen.de/software/openmesh/download/ 使用cmake gui 注意:先安装qt5 使用 CMake-Gui 构建 vs 2019 项目 注意 where is the source code 是<project…...
std::env是什么库?|Python一对一教学答疑
你好,我是悦创。 std::env 是 Rust 标准库中的一个模块,提供了访问操作系统环境的功能,比如处理环境变量、程序参数等。这个模块包含了一系列的函数和类型,用于管理与程序执行环境相关的信息。以下是 std::env 模块提供的一些主要…...
Go语言--广播式并发聊天服务器
实现功能 每个客户端上线,服务端可以向其他客户端广播上线信息;发送的消息可以广播给其他在线的客户支持改名支持客户端主动退出支持通过who查找当前在线的用户超时退出 流程 变量 用户结构体 保存用户的管道,用户名以及网络地址信息 typ…...
Spring MVC 全注解开发
1. Spring MVC 全注解开发 文章目录 1. Spring MVC 全注解开发2. web.xml 文件 的替代2.1 Servlet3.0新特性2.2 编写 WebAppInitializer 3. Spring MVC的配置3.1 Spring MVC的配置:开启注解驱动3.2 Spring MVC的配置:视图解析器3.3 Spring MVC的配置&…...
MQTT——Mosquitto使用(Linux订阅者+Win发布者)
前提:WSL(Ubuntu22)作为订阅者,本机Win10作为发布者。 1、Linux安装Mosquitto 命令行安装。 sudo apt-get install mosquitto 以上默认只安装了mosquitto的服务,不带测试客户端工具mosquitto_sub和mosquitto_pub。如…...
ArcGIS识别不GDB文件地理数据库显示为空?
点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 我们经常会碰到拷贝的GDB文件ArcGIS无法识别,软件只是把他当做普通的文件夹去看待&am…...
旅游数据|基于Java+vue的旅游数据分享系统(源码+数据库+文档)
旅游数据分享系统 目录 基于SprinBootvue的旅游数据分享系统 一、前言 二、系统设计 三、系统功能设计 5.1系统功能实现 5.2管理员模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:…...
AI Scientist-v2最佳实践:提高研究成功率的10个技巧
AI Scientist-v2最佳实践:提高研究成功率的10个技巧 【免费下载链接】AI-Scientist-v2 The AI Scientist-v2: Workshop-Level Automated Scientific Discovery via Agentic Tree Search 项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Scientist-v2 想…...
B站视频下载终极方案:DownKyi全功能解析与高效使用指南
B站视频下载终极方案:DownKyi全功能解析与高效使用指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...
OpenRGB终极指南:一个软件统一管理所有RGB设备,告别多软件混乱
OpenRGB终极指南:一个软件统一管理所有RGB设备,告别多软件混乱 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgramm…...
博客从 Ubuntu 16.04 迁移到 FreeBSD:成本减半,性能提升超 10 倍!
Bruno Croci 的网站迁移之旅Bruno Croci 正在为 2026 年柏林的开源硬件峰会做准备。他的博客在 Ubuntu 16.04 上运行了 10 年,于 2026 年 5 月 21 日,他将其迁移到了 FreeBSD。迁移动机:旧系统的安全隐患与成本考量这个博客在 Digital Ocean …...
OpenSSH CVE-2024-6387 漏洞原理与实战修复指南
1. 这不是普通补丁:CVE-2024-6387 是 OpenSSH 里埋了二十年的“定时炸弹”你有没有遇到过这种情况:凌晨三点,监控告警疯狂闪烁,SSH 登录失败率突然飙升到98%,但服务器负载、内存、磁盘一切正常;运维同事反复…...
5分钟搞定Windows风扇控制:Fan Control终极免费散热优化方案
5分钟搞定Windows风扇控制:Fan Control终极免费散热优化方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…...
基于FPGA的嵌入式频谱分析仪设计:低功耗实时信号处理方案
1. 项目概述:为什么要在FPGA上做频谱分析仪?做射频测试的工程师,对频谱分析仪肯定不陌生。实验室里动辄几十万上百万的台式机,性能强悍,功能全面,但有个问题:它离不开实验室。当你需要做外场测试…...
PowerToys汉化指南:3步让英文效率工具变成你的中文助手
PowerToys汉化指南:3步让英文效率工具变成你的中文助手 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 你是不是曾经因为PowerToys的英文界面…...
保姆级教程:在Ubuntu 22.04 LTS上从零部署Zabbix 6.0监控系统(含MariaDB配置)
从零构建企业级监控系统:Ubuntu 22.04下Zabbix 6.0与MariaDB深度整合指南 第一次接触服务器监控系统时,我被各种专业术语和复杂的配置步骤弄得晕头转向。直到遇到Zabbix,这个开箱即用的监控解决方案彻底改变了我的运维工作方式。本文将带你完…...
