LeetCode 第28天

93. 复原 IP 地址
这题挺难的,实际上我觉得分割字符串的题都挺难的,即使知道了回溯算法,也是无从下手。因为要对字符串进行处理,关于分割点不知道怎么处理。关键部分理解在代码里。

class Solution {
private:
// 判断分割的子串是否合理bool isValid(const string& s, int start, int end){// 初始大于末尾,肯定错了if (start > end){return false;}// 如果以0开头的数字if (s[start] == '0' && start != end){//不是单个数字,但是以0开头return false;}int num = 0;// 非数字,或数字大于255for (int i = start; i<=end; i++){if (s[i] < '0' || s[i] > '9'){return false;}num = num * 10 + (s[i] - '0');if (num > 255){return false;}}// 否则正确return true;   }
public:// 结果集vector<string> res;// 回溯三部曲 参数、递归边界、循环void backtracking(string& s,int startIndex, int pointNum){// 如果点数等于三直接返回,不用继续分割了if (pointNum == 3){if (isValid(s,startIndex, s.size()-1)){res.push_back(s);}return;}// 遍历,回溯for (int i = startIndex; i<s.size(); i++){// 先分割第一部分,如果前面出现错误,则不继续分割了if (isValid(s, startIndex, i)){// string类型的插入s.insert(s.begin() + i + 1,'.');// 插入完点数加1pointNum++;// 递归,注意加了点数后字符串总长度增加,下次的起始位置为i+2backtracking(s, i+2,pointNum);// 回溯,点数回到原来位置,擦除之前插入的点pointNum--;s.erase(s.begin() + i + 1);}elsebreak;}}vector<string> restoreIpAddresses(string s) {res.clear();if (s.size() < 4 || s.size() > 12){return res;}backtracking(s, 0, 0);return res;}
};

78. 子集

求子集是最宽泛的,其结束条件与加入条件都即为宽松,每一层递归的中间结果都可以直接加入最终结果集,仅当开始索引大于数组大小时结束递归。

class Solution {
public:// 存储中间结果的数组vector<int> tmp;// 存储最终结果的数组vector<vector<int>> res;// 仅需一个startIndex来避免重复集合的问题void backtracking(vector<int>& nums, int startIndex){// 结果集的条件很宽松,只要不要有重复的,不管怎么组合都是一个结果res.push_back(tmp);// 可以选择性省略,因为没有其他终止条件,for循环会自动终止if (startIndex >= nums.size()){return;}for (int i = startIndex; i<nums.size(); i++){// 简单向后加入、递归、回溯tmp.push_back(nums[i]);backtracking(nums, i + 1);tmp.pop_back();}}vector<vector<int>> subsets(vector<int>& nums) {backtracking(nums, 0);return res;}
};

90. 子集 II

这个自己多加了一个条件——“其中可能包含重复元素”,但是结果却不能包含重复的子集。因为集合中的每一个元素只能用一次,且集合不存在顺序之分,因此这也是一个组合元素不可重复取的问题。

class Solution {
public:vector<int> path;vector<vector<int>> res;// 只需先排序,在同一层中如果相邻元素相同直接跳过即可void backtracking(vector<int>& nums, int startIndex){res.push_back(path);// 这句可以不加,因为for循环满足i>=nums.size()时可以直接结束循环if (startIndex >= nums.size()){return;}for (int i = startIndex; i<nums.size(); i++){// 在排序后的相邻元素相同的情况下可以直接跳过if (i > startIndex && nums[i] == nums[i-1]){continue;}path.push_back(nums[i]);// startIndex i+1表示每个元素仅可使用一次backtracking(nums, i + 1);path.pop_back();}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {sort(nums.begin(),nums.end());backtracking(nums, 0);return res;}
};

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

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

相关文章

GPT每日面试题—如何理解JS原型链

充分利用ChatGPT的优势&#xff0c;帮助我们快速准备前端面试。今日问题&#xff1a;如何理解JS原型链&#xff1f; Q&#xff1a;如果在前端面试中&#xff0c;被问到如何理解JS原型链&#xff0c;怎么回答比较好&#xff1f; A&#xff1a;当面试官问到如何理解 JavaScript …

12.03 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 1、自动驾驶一周资讯 - 英伟达自动驾驶中国团队扩招&#xff1b;地平线与安波福首个合作成果取得定点&#xff1b;通用汽车自动驾驶Cruise首席执行官辞职 自动驾驶一周资讯 - 英伟达自动驾…

问题:创业者在组建创业团队时,在个人特征和动机方面更应该注重创业者的( ) #知识分享#微信#媒体

问题&#xff1a;创业者在组建创业团队时&#xff0c;在个人特征和动机方面更应该注重创业者的&#xff08; &#xff09; 参考答案如图所示

hook函数——useState

useState useState是React中的一个Hook函数&#xff0c;用于在函数组件中添加状态。基本使用语法如下&#xff1a; const [state, setState] useState(initialState) state&#xff1a;表示当前状态的值setState&#xff1a;更新状态的函数initialState&#xff1a;初始状态…

为什么是0.1uF电容?

旁路电容是电子设计中常用的电容器之一&#xff0c;主要用于过滤电源噪声和稳定电源电压。在实际应用中&#xff0c;0.1uF电容器是最常用的旁路电容值之一&#xff0c;那么为什么常用旁路电容是0.1uF而不是其他值&#xff1f;这个值又是怎么来的呢&#xff1f;本文将深入探讨这…

基于微信小程序的校园二手交易平台

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【Java基础常见面试题】- Java SE vs Java EE

Java SE vs Java EE Java SE&#xff08;Java Platform&#xff0c;Standard Edition&#xff09;: Java 平台标准版&#xff0c;Java 编程语言的基础&#xff0c;它包含了支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件。Java SE 可以用于构建桌面应用程序或简…

UDP 用户数据报协议

目录 1 UDP 1.1 UDP 的主要特点 1.1.1 UDP 是面向报文的 1.1.2 UDP 通信和端口号的关系 1.2 UDP 的首部格式 1.2.1 UDP 基于端口的分用 1.3 UDP抓包 1 UDP UDP 只在 IP 的数据报服务之上增加了一些功能&#xff1a; 1.复用和分用 2.差错检测 1.1 UDP 的主要特点 1.无连…

PSM-Net根据Stereo图像生成depth图像

一、新建文件夹 在KITTI数据集下新建depth_0目录 二、激活anaconda环境 conda activate pt14py37三、修改submission.py文件 3.1 KITTI数据集路径 parser.add_argument(--datapath, default/home/njust/KITTI_DataSet/00/, helpselect model)3.2 深度图像输出路径 save…

Vision Pro新机测评!“这才是MR硬件该有的模样!”

期盼很久的Vision Pro终于到了&#xff0c;小编迫不及待地体验了一把&#xff0c;效果相当非常震撼&#xff0c;操作非常丝滑&#xff0c;画面非常清晰…来不急解释了&#xff0c;快和小编一起来看一下吧~ 新机一到公司&#xff0c;为解大家对Vision Pro 的“相思之苦”&#x…

一篇文章理解时间复杂度和空间复杂度

今天也是很开心的学到了数据结构&#xff0c;也是打算把我自己对知识的理解给写出来了。第一篇数据结构开始咯。开始之前我们先理解一个概念。 什么是算法效率&#xff1f; 算法效率是指算法执行的速度或完成任务所需的资源&#xff08;如时间和空间&#xff09;的度量。它通…

Pymysql之Cursor常用API

Cursor常用API 1、cursor.execute(query, argsNone)&#xff1a;执行sql语句。 参数: query (str)&#xff1a;sql语句。 args (tuple, list or dict)&#xff1a;sql语句中如果有变量&#xff0c;或者格式化输出&#xff0c;会在这里填充数据。 Returns&#xff1a;返…

2.8 假期作业

1.变量的指针&#xff0c;其含义是指该变量的 B 。 A&#xff09;值 B&#xff09;地址 C&#xff09;名 D&#xff09;一个标志 2.已有定义int k2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k&#xff0c;下面不能正确执…

日志报错 git -c dif.mnemonicprefix=false -c core.guotepath=false 解决方法

前言: 在进行下面操作前,必须确保,你是否安装了Git。 查看Git 在命令行窗口中输入`git --version`: 如果这个命令成功显示了Git的版本信息,这表明Git已经被安装。 1. 使用Sourcetree SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端…

docker挂载数据卷

一、Docker 容器的数据卷 1、什么是数据卷&#xff1f; 数据卷是经过特殊设计的目录&#xff0c;可以绕过联合文件系统&#xff08;UFS&#xff09;&#xff0c;为一个或者多个容器提供访问&#xff0c;数据卷 设计的目的&#xff0c;在于数据的永久存储&#xff0c;它完全独…

react将选中文本自动滑动到容器可视区域内

// 自动滚动到可视区域内useEffect(() > {const target ref;const wrapper wrapperRef?.current;if (target && wrapperRef) {const rect target.getBoundingClientRect();const wrapperRect wrapper.getBoundingClientRect();const isVisible rect.bottom &l…

NLP入门系列—词嵌入 Word embedding

NLP入门系列—词嵌入 Word embedding 2013年&#xff0c;Word2Vec横空出世&#xff0c;自然语言处理领域各项任务效果均得到极大提升。自从Word2Vec这个神奇的算法出世以后&#xff0c;导致了一波嵌入&#xff08;Embedding&#xff09;热&#xff0c;基于句子、文档表达的wor…

MySQL5.7 百万数据迁移到 ElasticSearch7.x

前言 在日常项目开发中,可能会遇到使用 ES 做关键词搜索的场景,但是一般来说业务数据是不会直接通过 CRUD 写进 ES 的。 因为这可能违背了 ES 是用来查询的初衷,数据持久化的事情可以交给数据库来做。那么,这里就有一个显而易见的问题:ES 里的数据从哪里来? 本文介绍的…

幻兽帕鲁服务器全自动部署教程,小白也能轻松上手

幻兽帕鲁太火了&#xff0c;官方palworld服务器不稳定&#xff1f;不如自建服务器&#xff0c;基于腾讯云幻兽帕鲁服务器成本32元全自动部署幻兽帕鲁服务器&#xff0c;超简单有手就行&#xff0c;全程自动化一键部署10秒钟即可搞定&#xff0c;无需玩家手动部署幻兽帕鲁游戏程…

深入探索:缓冲区溢出漏洞及其防范策略

在网络安全的广阔领域中&#xff0c;缓冲区溢出漏洞一直是一个重要的议题。这种漏洞&#xff0c;如果被恶意利用&#xff0c;可能会导致严重的安全问题&#xff0c;包括数据泄露、系统崩溃&#xff0c;甚至可能被攻击者利用来执行恶意代码。在本文中&#xff0c;我们将深入探讨…