day24|leetCode 93.复原IP地址 , 78.子集 , 90.子集II
8.复原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中的任何数字。你可以按 任何 顺序返回答案。
其实本题与上一题很像,都是用分割线在所给字符串里进行切割,本题,如果切割到>255的情况就得终止,以及题目要求中ip地址只有四段,即出现三个逗号时就得终止
class Solution {
public:vector<string>result;//由题,本题返回的结果是由字符串组成的一维数组//判断是否为合法ip地址bool isValid(const string & s,int start,int end){if (start > end) {return false;}if(s[start] == '0' && start!=end )//整数可以是单个0,但是不能是由0前导的整数{return false;}int num = 0;for(int i=start;i<=end;i++){if(s[i]>'9' || s[i]<'0')//非法数字{return false;}num = num*10 + (s[i]-'0');//本题传入的数字是字符串类型,要记得转成整型if(num > 255)//非法{return false;}}return true;}void backtracking(string& s,int startIndex,int pointSum){//终止条件if(pointSum==3){if(isValid(s,startIndex,s.size()-1)==true){result.push_back(s); } return;}
for(int i=startIndex;i<s.size();i++){if(isValid(s,startIndex,i)==true)//判断子区间是否为有效{s.insert(s.begin() + i + 1 , '.'); // 在i的后面插入一个逗点cout<<pointSum;pointSum++;backtracking(s,i+2,pointSum);//因为加了逗号占一个位置,所以应该传入i+2pointSum--;//回溯s.erase(s.begin()+i+1);//回溯}else{//不合法break;}}}vector<string> restoreIpAddresses(string s) {result.clear();if(s.size()<4 || s.size()>12)return result;//剪枝backtracking(s,0,0);return result;}
};
疑惑点:
bool isValid(const string & s,int start,int end) { if (start > end) { return false; }
为什么要加上这个判断,不加上的话,"101023"这个示例就过不去
分析原因:因为 backtracking(s,i+2,pointSum);这里的i是两个两个加
** 全过程 **
初始条件
输入:
"101023"我们调用restoreIpAddresses方法,它会执行以下步骤:
初始化
result调用
backtracking(s, startIndex=0, pointSum=0)。
递归模拟
第一次递归 (初始状态)
startIndex = 0, pointSum = 0遍历
i从startIndex=0开始,尝试插入.。子循环:
i=0
子区间:
"1"(合法,isValid(0,0)返回true)。插入
.:s = "1.01023",pointSum++ = 1。递归调用
backtracking(s, startIndex=2, pointSum=1)。
第二次递归
startIndex = 2, pointSum = 1遍历
i从startIndex=2开始,尝试插入.。子循环:
i=2
子区间:
"0"(合法,isValid(2,2)返回true)。插入
.:s = "1.0.1023",pointSum++ = 2。递归调用
backtracking(s, startIndex=4, pointSum=2)。
第三次递归
startIndex = 4, pointSum = 2遍历
i从startIndex=4开始,尝试插入.。子循环:
i=4
子区间:
"1"(合法,isValid(4,4)返回true)。插入
.:s = "1.0.1.023",pointSum++ = 3。递归调用
backtracking(s, startIndex=6, pointSum=3)。
第四次递归(出现问题的地方)
startIndex = 6, pointSum = 3此时,
pointSum == 3,需要检查剩下的子区间是否合法。
调用
isValid(s, startIndex=6, end=5)(这里的end=5是s.size()-1)。问题:
startIndex=6,但end=5,导致start > end。
9.子集
给你一个整数数组
nums,数组中的元素 互不相同 。返回该数组所有可能的子集
(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:
输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:
输入:nums = [0] 输出:[[],[0]]

由上图可知,本题与之前的回溯问题最大的区别就是,之前的回溯算法题收集的都是叶子节点,但是本题收集的是除根结点外所有结点
class Solution {
public:vector<int>path;vector<vector<int>>result;void backtracking(vector<int>&nums,int startIndex){result.push_back(path);//收集空集if(startIndex>=nums.size())//终止条件{return;}
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) {path.clear();result.clear();backtracking(nums,0);return result;}
};
无剪枝操作,因为本题需要遍历整个树,并记录每个结点
10.子集问题II
给你一个整数数组
nums,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
这题升级的点在于去重操作
思路:效仿组合总和II先将数组进行排序后再传入
class Solution {
public:vector<int>path;vector<vector<int>>result;void backtracking(vector<int>&nums,int startIndex,vector<bool>&used){result.push_back(path);if(startIndex>=nums.size()){return;}for(int i=startIndex;i<nums.size();i++){if(i>0 && nums[i]==nums[i-1] && used[i-1]==false)//相同元素会产生的结果已经收集过了{continue;}path.push_back(nums[i]);used[i]=true;backtracking(nums,i+1,used);used[i]=false;//回溯path.pop_back();}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {path.clear();result.clear();vector<bool>used(nums.size(),false);sort(nums.begin(),nums.end());backtracking(nums,0,used);return result;}
};
相关文章:
day24|leetCode 93.复原IP地址 , 78.子集 , 90.子集II
8.复原ip地址 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和"192.168.1.1" 是 有效 IP 地址,但是 "…...
RocketMQ: Broker 使用指南
Broker 配置参数 获取 Broker 的默认配置 $ sh mqbroker -m Broker 启劢时,如何加载配置 ### 第一步生成 Broker 默认配置模版 sh mqbroker -m > broker.p ### 第二步修改配置文件, broker.p ### 第三步加载修改过的配置文件 nohup sh mqbroker -c broker.pBrok…...
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
文章目录: 【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行前言安装docker-centos7 【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行 💬欢迎交流:在学习…...
5、AI测试辅助-生成测试用例思维导图
AI测试辅助-生成测试用例思维导图 创建测试用例两种方式1、Plantuml思维导图版本 (不推荐)2、Markdown思维导图版本(推荐) 创建测试用例两种方式 完整的测试用例通常需要包含以下的元素: 1、测试模块 2、测试标题 3、前置条件 4、…...
nature communications论文 解读
题目《Transfer learning with graph neural networks for improved molecular property prediction in the multi-fidelity setting》 这篇文章主要讨论了如何在多保真数据环境(multi-fidelity setting)下,利用图神经网络(GNNs&…...
基于Java Springboot公园管理系统
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...
神经网络(系统性学习三):多层感知机(MLP)
相关文章: 神经网络中常用的激活函数 神经网络(系统性学习一):入门篇 神经网络(系统性学习二):单层神经网络(感知机) 多层感知机(MLP) 多层感…...
07-SpringCloud-Gateway新一代网关
一、概述 1、Gateway介绍 官网:https://spring.io/projects/spring-cloud-gateway Spring Cloud Gateway组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防…...
HTML 表单实战:从创建到验证
HTML表单是用于收集用户输入数据的一种方式,可以用于创建各种类型的表单,例如登录表单、注册表单、调查问卷表单等。本文将详细介绍表单元素的使用,并利用JavaScript实现对表单数据的验证。 HTML表单元素的使用 输入框<input> <i…...
【redis 】string类型详解
string类型详解 一、string类型的概念二、string类型的常用指令2.1 SET2.2 GET2.3 MSET2.4 MGET2.5 SETNX2.6 INCR2.7 INCRBY2.8 DECR2.9 DECRBY2.10 INCRBYFLOAT2.11 APPEND2.12 GETRANGE2.13 SETRANGE2.14 STRLEN 三、string类型的命令小结四、string类型的内部编码五、strin…...
Vue.js 学习总结(13)—— Vue3 version 计数介绍
前言 Vue3.5 提出了两个重要概念:version计数和双向链表,作为在内存和计算方面性能提升的最大功臣。既然都重要,那就单挑 version 计数来介绍,它在依赖追踪过程中,起到快速判断依赖项有没有更新的作用,所以…...
【数据结构】【线性表】一文讲完队列(附C语言源码)
队列 队列的基本概念基本术语基本操作 队列的顺序实现顺序队列结构体的创建顺序队列的初始化顺序队列入队顺序队列出队顺序队列存在的问题分析循环队列代码汇总 队列的链式实现链式队列的创建链式队列初始化-不带头结点链式队列入队-不带头节点链式队列出队-不带头结点带头结点…...
2024年11月最新 Alfred 5 Powerpack (MACOS)下载
在现代数字化办公中,我们常常被繁杂的任务所包围,而时间的高效利用成为一项核心需求。Alfred 5 Powerpack 是一款专为 macOS 用户打造的高效工作流工具,以其强大的定制化功能和流畅的用户体验,成为众多效率爱好者的首选。 点击链…...
ODBC连接PostgreSQL数据库后,网卡DOWN后,客户端进程阻塞问题解决方法
问题现象:数据库客户端进程数据库连接成功后,再把跟数据库交互的网卡down掉,客户端进程就会阻塞,无法进行其他处理。该问题跟TCP keepalive机制有关。 可以在odbc.ini文件中增加相应的属性来解决,在odbc.ini 增加如下…...
VsCode使用git提交很慢(一直显示在提交)_vscode commit很慢解决方法
VsCode使用git提交很慢(一直显示在提交)_vscode commit很慢...
linux从0到1——shell编程9
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
计算机网络技术专业,热门就业方向和就业前景
前言 在数字化飞速发展的今天,计算机网络技术专业成为了众多学子和职场人士关注的焦点。这一专业不仅涵盖了计算机硬件、软件和网络通信等多个领域的知识,更在就业市场上展现出强大的竞争力。本文将带您一探计算机网络技术专业的就业方向和就业前景&…...
C++中定义类型名的方法
什么是 C 中的类型别名和 using 声明? 类型别名与using都是为了提高代码的可读性。 有两种方法可以定义类型别名 一种是使用关键字typedef起别名使用别名声明来定义类型的别名,即使用using. typedef 关键字typedef作为声明语句中的基本数据类型的一…...
从零开始学习 sg200x 多核开发之 camera-sensor 添加与测试
sg2002 集成了 H.264 视频压缩编解码器, H.265 视频压缩编码器和 ISP;支持 HDR 宽动态、3D 降噪、除雾、镜头畸变校正等多种图像增强和矫正算法。 sophpi 中没有提供相关图像 sensor。本次实验是在 milkv-duo256m 上添加 GC2083。 GC2083 格科微的 GC2083 是一款…...
前端三剑客(二):CSS
目录 1. CSS 基础 1.1 什么是 CSS 1.2 语法格式 1.3 引入方式 1.3.1 行内样式 1.3.2 内部样式 1.3.3 外部样式 1.4 CSS 编码规范 2. 选择器 2.1 标签选择器 2.2 id 选择器 2.3 class 选择器(类选择器) 2.4 复合选择器 2.5 通配符选择器 3. 常用 CSS 样式 3.1 c…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
