【算法训练 day30 复原IP地址、子集、子集Ⅱ】

目录

  • 一、复原IP地址-LeetCode 93
    • 思路
    • 实现代码
    • 个人问题
    • 总结
  • 二、子集-LeetCode 78
    • 思路
    • 实现代码
    • 个人问题
  • 三.子集Ⅱ-LeeCode 90
    • 思路
    • 实现代码
    • 个人问题


一、复原IP地址-LeetCode 93

Leecode链接: leetcode 93
文章链接: 代码随想录
视频链接: B站

有效 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 中的任何数字。你可以按 任何 顺序返回答案。

示例:

输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]

思路

这道题是一个分割问题,可以用回溯穷举出所有结果。主要分为三个部分:切割ip段、验证ip段是否合法、插入结果到res中。ip切割这里不是使用substr函数,只需要使用insert成员函数即可,因为结果只需要一个完整的ip段,而不是一段一段。验证ip写一个自定义函数即可,插入结果到res这一步使用index来判断已经不适用了,因为ip有四个段,所以判断依据只需要改为是否使用了三个点即可。

实现代码

//cpp
class Solution {
public:vector<string>res;bool isvalid(const string& s,int begin,int end){if(begin > end) return false;if(s[begin] == '0' && begin != end) return false;int num = 0;for(int i = begin;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;}void restor(int pointnum,string&s,int index){if(pointnum==3){if(isvalid(s,index,s.size()-1)){res.push_back(s);}return;}for(int i = index;i<s.size();i++){if(isvalid(s,index,i)){pointnum++;s.insert(s.begin()+i+1,'.');restor(pointnum,s,i+2);pointnum--;s.erase(s.begin()+i+1);}else{break;}}}vector<string> restoreIpAddresses(string s) {res.clear();restor(0,s,0);return res;}
};

个人问题

没有想到怎么在字符串中插入字符’.',对insert用的比较少。

总结

难度中等,与分割回文串那题类似,需要注意的点有:插入结果的条件不再依靠index,而是依据段数;递归时不能传入i+1,因为插入字符后,前面的字符都往后移动一位;插入结果时需要对最后一段进行额外的一次判断,因为会有这种情况:192.168.1.399,这显然是不对的。


二、子集-LeetCode 78

Leecode链接: LeetCode 78
文章链接: 代码随想录
视频链接: B站

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的
子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

思路

题目与求组和类似,但有一个地方不同,在插入数据到res中时,组合需要进行一个判定,而子集不需要进行判断,每次进入一层递归就将结果插入到res中。至于为什么不需要判断,因为题目要求所有子集,任意一个数或者他们的组合都是子集,也就不要条件判断。

实现代码

//cpp
class Solution {
public:vector<vector<int>>res;vector<int>path;void sub(vector<int>& nums,int index){res.push_back(path);for(int i = index;i<nums.size();i++){path.push_back(nums[i]);sub(nums,i+1);path.pop_back();}}vector<vector<int>> subsets(vector<int>& nums) {res.clear();path.clear();sub(nums,0);return res;}
};

个人问题

无。


三.子集Ⅱ-LeeCode 90

Leecode链接: LeetCode 90
文章链接: 代码随想录
视频链接: B站

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的
子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例:

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

思路

题目有重复元素,需要去重,不能包含重复的子集。解题思路与与组合总和Ⅱ类似。个人没有使用数组来判断是否使用相同的元素,感觉这样比较方便。

实现代码

//cpp
class Solution {
public:vector<int>path;vector<vector<int>>res;void sub(int index,vector<int>& nums){res.push_back(path);for(int i = index;i<nums.size();i++){if(i>index && nums[i] == nums[i - 1]){continue;}path.push_back(nums[i]);sub(i+1,nums);path.pop_back();}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {res.clear();path.clear();sort(nums.begin(),nums.end());sub(0,nums);return res;}
};

个人问题

无。

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

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

相关文章

linux利用yum下载rpm离线包

下载到仓库 通过--downloadonly参数可以只下载不安装&#xff0c;下载后的rpm包保存在目录 /var/cache/yum/x86_64/[centos/fedora-version]/[repository]/packages$ sudo yum install --downloadonly <package-name>下载到指定目录 yum install --downloadonly --dow…

软考--试题六--抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory) 意图 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定他们具体的类 结构 适用性 1、一个系统要独立于它的产品的创建、组合和表示时 2、一个系统要由多个产品系统中的一个来配置时 3、当要强调一系列相关的产品对象的设…

Python中使用C扩展详解

文章目录 1. Python/C API示例2. Cython示例3. ctypes关于C扩展的进一步讨论安全性和兼容性性能优化策略调试C扩展发布和分发C扩展 应用实例&#xff1a;加速矩阵乘法运算1. 准备C扩展代码2. 编译C扩展3. 在Python中使用C扩展 在Python中&#xff0c;使用C扩展是一种提高程序性…

贪心 + 证明:Leetcode 1953. 你可以工作的最大周数

描述 给你 n 个项目&#xff0c;编号从 0 到 n - 1 。同时给你一个整数数组 milestones &#xff0c;其中每个 milestones[i] 表示第 i 个项目中的阶段任务数量。 你可以按下面两个规则参与项目中的工作&#xff1a; 每周&#xff0c;你将会完成 某一个 项目中的 恰好一个 阶…

《机器学习入门:sklearn 基础教程全解析》

在当今科技飞速发展的时代&#xff0c;机器学习如同一颗璀璨的明星&#xff0c;吸引着无数人的目光。而 sklearn 作为机器学习领域的重要工具之一&#xff0c;为我们提供了便捷的途径来探索和应用这一神奇的技术。本文将为您详细介绍 sklearn 的基础教程&#xff0c;带您领略机…

Leetcode - 130双周赛

目录 一&#xff0c;3142. 判断矩阵是否满足条件 二&#xff0c;3143. 正方形中的最多点数 三&#xff0c;3144. 分割字符频率相等的最少子字符串 四&#xff0c;3145. 大数组元素的乘积 一&#xff0c;3142. 判断矩阵是否满足条件 本题题意&#xff0c;满足每一列的数全部…

QApplication setStyleSheet 和 QMainWidows setStyleSheet 区别

概述 在 Qt 框架中&#xff0c;QApplication::setStyleSheet() 和 QMainWindow::setStyleSheet() 这两个方法都被用来设置样式表&#xff08;StyleSheet&#xff09;&#xff0c; 但它们的作用范围和目标有所不同。QApplication::setStyleSheet() 应用于该应用程序中的所有窗…

【Linux系统编程】第十九弹---进程状态(下)

​​​​​​​ ✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、僵尸进程 2、孤儿进程 3、运行状态 4、阻塞状态 5、挂起状态 6、进程切换 总结 1、僵尸进程 上一弹…

网工路由基础——动态路由协议(RIP)

一、动态路由协议的分类 1.按工作区域分类&#xff1a; 动态路由协议按用途分类可以分为内部网关协议&#xff08;IGP&#xff09;和外部网关协议&#xff08;EGP&#xff09;。一个Internet网可以被分成多个域或多个自治系统&#xff0c;各自治系统通过一个核心路由器…

基于语义感知的对象草图绘制

摘要 抽象是素描的核心&#xff0c;因为线条画的简单和最小化特性。抽象涉及识别对象或场景的基本视觉属性&#xff0c;这需要语义理解和对高级概念的先验知识。因此&#xff0c;抽象表现对艺术家来说是具有挑战性的&#xff0c;对机器来说更是如此。我们提出了CLIPasso&#…

软考--试题六--访问者模式(Visitor)

访问者模式(Visitor) 意图 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作 结构 适用性 1、一个对象的结构包含很多类对象&#xff0c;他们有不同的接口&#xff0c;而用户想对这些对象实施一些依赖于其具体类的操…

STL <string>--------String的OJ题目

1.题目截图&#xff08;把字符串转换成整数----atoi&#xff09; 1.1题目解析&#xff08;在代码里&#xff09; class Solution { public:int myAtoi(string str) {// 100% 97.45% int len str.size();if(len 0)return 0;int i 0, flag 1, isSignal 0, res 0;while(…

小红书孕妇宝妈暴力拉新玩法,每日两小时,单日收益500+

哎呀&#xff0c;你好呀&#xff0c;亲爱的小伙伴们&#xff01;我今天心血来潮&#xff0c;想和你们分享一个超级棒的方法&#xff0c;这个方法我亲自试过&#xff0c;超级有效&#xff01;就是在小红书上针对孕妇和宝妈们进行引流的方法。听起来是不是很有趣呀&#xff1f;&a…

下拉表单,文本域表单

1.下拉表单 <select> 内部标签<option> 选择项 <form>籍贯<select><option>山东</option><option>上海</option><option>河南</option><option>河北</option><option>北京</option><…

PyCharm运行程序遇到‘[WinError 1455] 页面文件太小’的问题

最近在云环境的PyCharm运行程序&#xff0c;第一次遇到了WinError 1455的问题&#xff0c;感谢大神们给出的解决方法&#xff0c;特此记录一下。 错误提示是‘页面文件小’导致的问题&#xff0c;那么将页面调大即可。 电脑默认情况下没给D盘分配虚拟内存, 如果Python装在D盘…

【工具】macOS、window11访问limux共享目录/共享磁盘,samba服务安装使用

一、samba服务安装 Samba是一个免费的开源软件实现&#xff0c;使得非Windows操作系统能够与Windows系统进行文件和打印服务共享。它实现了SMB/CIFS协议&#xff0c;并且能够在Linux、Unix、BSD等多种系统上运行。 安装 samba&#xff1a; sudo yum install samba配置 samba…

裁员大盘点:2023年50家知名企业到底“减少”了多少员工?

面对裁员传闻&#xff0c;各家都有各家的说法。 什么“人员盘点”、“广进计划、”“优化”、“毕业”、“正常人员调整”、“瘦身”、“寒冬”…… 那么&#xff0c;国内知名企业在过去一年到底增加or减少了多少人&#xff1f; 博主翻查了一些知名上市企业2023年的财报&#…

ubuntu22.04下安装kubernetes(k8s 1.28版)

本教程可以作为学习用集群,不能用于生产,生产环境还需要做更多调优和设置 适合ubuntu22.04 ,本人亲测可用 后续还会整理出k8s常用命令集 准备工作 准备三台服务器/虚拟机,网络能正常互通,能连网 192.168.15.81 master 192.168.15.82 node1 192.168.15.83 node2所有节点…

【SRC实战】findsomething未授权修改密码

挖个洞先 https://mp.weixin.qq.com/s/i6R7OZ-5h9V5o3Kfho7QWA “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合 ” 01 — 漏洞证明 1、网站只有账号密码登录功能&#xff0c;没有注册&#xff0c;忘记密码 2、利用findsomething发现修改密码接口 find…

2024 年第四届长三角高校数学建模竞赛赛题B题超详细解题思路+问题一二代码分享

2024年第四届长三角数学建模竞赛B题详细解题思路 赛道B&#xff1a;人工智能范式的物理化学家 长三角分享资料&#xff08;问题一代码论文思路&#xff09;链接&#xff08;18点更新&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1lteKvIWNZ4v-Gd7oOcg…