回溯算法复原ip,子集1和子集2

先做一个总结吧:今天三题里面有两题是纯手工自己完成的,并且三题的总和时长不到两个小时,这个成绩我还是很满意的。下面就来复盘一下吧

首先第一题(也是唯一一道看了题解的)

题目:

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

示例 1:

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

开始思路:做这题时我首先想到的就是和昨天那题一样的截取段来操作,然后就写。结果写到后面发现这题是要在原本的字符串上修改,所以用到了两个我压根没有学过的函数。迫不得已之下看了题解(手动狗头)

思路: 因为我们看到ip是由四段组成的,所以直接先朝着终止条件进军,定义一个变量判断是次数是否为3,如果为三那么进来下剩下的字符都属于第四段。

当然我们还需要一个判断是否符合规矩的函数。这个很简单

所以如果是3段,那么直接判断剩下的代码是否为正确的字符串,如果是加到result里面去。然后用for循环先判断如果true,那么就往后面加一个  .    然后给段数加1,然后递归,最后回溯

这里再来介绍一下新学的两个函数

1往字符串的第某位数上加一个字符

array.insert(array.begin() + i + 1,' . ');

这里的begin是迭代器必须加,参数1是表示加在什么位置,参数2是加什么。

2往字符串删除一个字符

array.erase(s.begin() + i + 1);

还有一个是新学的思路

如果我想判断字符串的某一段区间的字符是否大于一个数字

可以用for循环和num = 0

num = num * 10 + (array[i] - '0')

看代码

class Solution {
private:vector<string> result;bool check(string s, int startIndex, int right){if(startIndex == s.size())return false;if(s[startIndex]=='0' && right>startIndex) return false;int num = 0;for(int i = startIndex;i <= right;i++){if(s[i] > '9' || s[i] < '0') return false;num = num * 10 + (s[i] - '0');if(num > 255) return false;}return true;}void backtranking(string s, int startIndex, int time){if(time == 3){if(check(s, startIndex, s.size()-1)){result.push_back(s);}   }for(int i = startIndex;i < s.size();i++){if(check(s,startIndex,i)){s.insert(s.begin()+i+1,'.');time++;backtranking(s,i+2,time);time--;s.erase(s.begin()+i+1);}elsebreak;}} 
public:vector<string> restoreIpAddresses(string s) {backtranking(s,0,0);return result;}
};

 下面两题比较简单直接看代码

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

子集

(幂集)。

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

 

class Solution {
private:void backtracking(const vector<int>& nums, int startIndex, int i){if(path.size() == i){result.push_back(path);}for(int j = startIndex; j < nums.size();j++){path.push_back(nums[j]);backtracking(nums,j+1,i);path.pop_back();}}
public:vector<int> path;vector<vector<int>> result;vector<vector<int>> subsets(vector<int>& nums) {result.push_back(path);for(int i = 1;i <= nums.size();i++){backtracking(nums,0,i);}return result;}
};

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

子集

(幂集)。

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

class Solution {
private:vector<vector<int>> result;vector<int> path;void backtracking(const vector<int>& nums,int startIndex,int i){if(path.size() == i){result.push_back(path);}for(int j = startIndex;j < nums.size();j++){if(j>startIndex&& nums[j-1] == nums[j])continue;path.push_back(nums[j]);backtracking(nums,j+1,i);path.pop_back();}}
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {result.push_back(path);sort(nums.begin(),nums.end());for(int i = 1;i <= nums.size();i++){backtracking(nums,0,i);}return result;}
};

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

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

相关文章

[SaaS] AI+数据,tiktok选品,找达人,看广告数据

TK观察专访丨前阿里“鲁班”创始人用AIGC赋能TikTok获千万融资用AI数据做TikTokhttps://mp.weixin.qq.com/s/xp5UM3ROo48DK4jS9UBMuQ主要还是爬虫做数据的。 商家做内容&#xff1a;1.找达人拍内容&#xff0c;2.商家自己做原生自制内容&#xff0c;3.广告内容。 短视频&…

南京观海微电子----焊机用DC-DC 24V 升压电路分析

焊机用DC-DC 24V 升压电路分析 辅电升压电路关键元件有&#xff1a;UC3843、电感、MOS功率管、整流二极管等组成。其核心是UC3843。UC3843是脉宽调制IC&#xff0c;工作频率可达500kHz&#xff0c;组成电路引脚少、外围元件简单&#xff0c;启动电流仅需1mA&#xff0c;开启电压…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 最小配对和(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 最小配对和 🌍 评测功能需要订阅专栏后私信联系清隆解锁~…

BC C language

题目汇总 No.1 打印有规律的字符(牛牛的字符菱形) 代码展示 #include<stdio.h> int main() {char ch=0;scanf("%c"

B树、B+树与索引、联合索引

B树&#xff1a; 1970年&#xff0c;R.Bayer和E.mccreight提出了一种适用于外查找的树&#xff0c;它是一种平衡的多叉树&#xff0c;称为B树&#xff08;或B-树、B_树&#xff09;。 一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树&#xff0c;或…

Meta Llama 3 残差结构

Meta Llama 3 残差结构 flyfish 在Transformer架构中&#xff0c;残差结构&#xff08;Residual Connections&#xff09;是一个关键组件&#xff0c;它在模型的性能和训练稳定性上起到了重要作用。残差结构最早由He et al.在ResNet中提出&#xff0c;并被广泛应用于各种深度…

24个数学符号大小写读法及中文注音

大写小写英文注音国际音标中文注音Ααalphaalfa阿耳法Ββbetabeta贝塔Γγgammagamma伽马Δδdetadelta德耳塔Εεepsilonepsilon艾普西隆Ζζzetazeta截塔Ηηetaeta艾塔Θθthetaθita西塔Ιιiotaiota约塔Κκkappakappa卡帕∧λlambdalambda兰姆达Μμmumiu缪Ννnuniu纽…

ArUco与AprilTag 标签

一、简介 在许多计算机视觉应用程序中&#xff0c;姿势估计非常重要&#xff1a;机器人导航&#xff0c;增强现实等等。 该过程基于发现真实环境中的点与其2d图像投影之间的对应关系。 这通常是一个困难的步骤&#xff0c;因此通常使用合成或基准标记来简化操作。 最受流行的…

Day13 配置AutoMapper关系映射

在上一节 中,无论ToDoController 控制器,或 IToDoService 服务的接口中,方法的实参必须是传实体类。但在实际开发过程中,这样是不允许的。标准且规范的做法是,定义一个数据传输层,即DTO层。 DTO(Data Transfer Objects)数据传输对象,它是一种设计模式,主要用于在不同…

【机器学习-09】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之高斯混合sklearn.mixture模块研究

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【全网唯一】触摸精灵iOS版纯离线本地文字识别插件

目的 触摸精灵iOS是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。但触摸精灵的图色功能比较单一&#xff0c;无法识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要…

【Python绘画】画正方形简笔画

本文收录于 《一起学Python趣味编程》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、代码示例三、知识点梳理四、总结 一、前言 本文介绍如何使用Python的海龟画图工具turtle&#…

Stable Diffusion 临时文件夹设定

即使将Easy Diffusion或Stable Diffusion安装在C盘之外的某个地方&#xff0c;如果持续使用Stable Diffusion一段时间后&#xff0c;仍然会发现C盘空间在快速变小。这是因为有很多自动下载的文件还是保存在C盘。为了解决这个问题&#xff0c;我们需要做以下临时文件夹设定。 H…

简单的学生信息管理系统

简单的学生信息管理系统 import java.sql.*; import java.util.Scanner;public class StudentManagementSystem {private static final String URL "jdbc:mysql://localhost:3306/test";private static final String USER "root";private static final S…

【Flutter 面试题】 Assert(断言)有什么作用?什么时候有效?

【Flutter 面试题】 Assert(断言)有什么作用?什么时候有效? 文章目录 写在前面口述回答补充说明案例代码运行结果说明写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 👏🏻 正在学 Flu…

嵌入式 Linux LED 驱动开发实验学习

I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上&#xff0c;进行这个驱动开发实验之前&#xff0c;需要了解下地址映射。 地址映射 MMU 全称叫做 MemoryManage Unit&#xff0c;也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU&#x…

dvwa靶场的下载、配置

目录 下载 配置 连接数据库 搭建网站&#xff08;可选&#xff09; 配置靶场 下载 百度网盘链接&#xff1a;https://pan.baidu.com/s/1oK2UzKFxIIPQkhz6hD8WFQ?pwdpbb2 提取码&#xff1a;pbb2 迅雷链接&#xff1a;https://pan.xunlei.com/s/VNzHo9gXgbsk5E8tcx6Yek…

练习实践-linux启动耗时分析

练习实践-启动耗时整体概览&#xff0c;具体服务的启动细节 参考来源&#xff1a; B站up主林哥讲运维&#xff1a;一分钟学会&#xff1a;可视化查看系统启动时的性能 如何使用Linux命令查看系统的启动进程&#xff08;linux查看启动进程&#xff09; 解决ubuntu开机变慢&…

奇偶交换排序

奇偶交换排序&#xff08;Odd-Even Transposition Sort&#xff09;&#xff0c;也称为奇偶排序&#xff08;Odd-Even Sort&#xff09;&#xff0c;是一种简单的并行排序算法&#xff0c;主要用于并行计算环境中。该算法基于冒泡排序的思想&#xff0c;通过多个阶段的奇偶交换…

AcWing 841. 字符串哈希——算法基础课题解

AcWing 841. 字符串哈希 题目描述 给定一个长度为 &#x1d45b; 的字符串&#xff0c;再给定 &#x1d45a; 个询问&#xff0c;每个询问包含四个整数 &#x1d459;1,&#x1d45f;1,&#x1d459;2,&#x1d45f;2&#xff0c;请你判断[&#x1d459;1,&#x1d45f;1] 和…