算法刷题Day28 | 93.复原IP地址、78.子集、90.子集II

目录

  • 0 引言
  • 1 复原IP地址
    • 1.1 我的解题
  • 2 子集
    • 2.1 我的解题
  • 3 子集II
    • 3.1 我的解题

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:算法专栏
  • 💥 标题:算法刷题Day28 | 93.复原IP地址、78.子集、90.子集II
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!

0 引言

加油

1 复原IP地址

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:

1.1 我的解题

其实就是切割问题,只不过需要考虑到 IP 的特殊性。就是要额外思考什么情况下切割的字符是满足情况的。

class Solution {
public:string combineIP(const vector<int>& path){string ip;for (auto data : path){ip += to_string(data);ip += '.';}ip.pop_back();  // 删除最后的 . return ip;}// 回溯函数void backTracing(string& s, int startIndex, vector<int>& path, vector<string>& paths){// 终止条件(注意path的长度只能是4)if (startIndex == s.size() && path.size() == 4){// 将path变换后插入res数组中paths.emplace_back(combineIP(path));}// 单层回溯逻辑for (int i = startIndex; i < s.size(); i++){string tmp = s.substr(startIndex, i - startIndex + 1);if (tmp.size() > 4){continue;}int number = stoi(tmp);// 如果条件不满足的话,就执行下一个分支,而不是跳出循环体if (number < 0 || number > 255 || (tmp.size() > 1 && tmp[0] == '0') ){continue;}// 条件满足path.emplace_back(number);backTracing(s, i + 1, path, paths);path.pop_back();}}vector<string> restoreIpAddresses(string s) {vector<int> path;vector<string> paths;backTracing(s, 0, path, paths);return paths;}
};

2 子集

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:秒杀了

2.1 我的解题

这道题其实和前面的组合问题,只是将 path 添加到 paths 结果集中的时机不同。组合问题是将满足条件的叶子节点添加到 paths 中,然后子集则是将所有节点都添加到 paths 中。

#include <iostream>
#include <vector>
#include <algorithm>class Solution {
public:void backTracing(vector<int>& nums, int startIndex, vector<int>& path, vector<vector<int>>& paths){// 结束条件if (startIndex == nums.size()){return;}for (int i = startIndex; i < nums.size(); i++){path.emplace_back(nums[i]);paths.emplace_back(path);backTracing(nums, i + 1, path, paths);path.pop_back();}}vector<vector<int>> subsets(vector<int>& nums) {vector<int> path;vector<vector<int>> paths;paths.push_back({});backTracing(nums, 0, path, paths);return paths;}
};

3 子集II

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:

3.1 我的解题

这道题和 40.组合总和II 类似,在给定的数组中都是有重复元素的,但是返回的子集中又不能有重复的元素。

这道题的关键就是树枝不用去重、树层去重。因为树层中,假如两个相邻节点以同样的数字开始遍历(假如都是从 1 开始),那么左侧的树枝已经将右侧树枝的结果已经组合完了。此时右侧再从这个数遍历的话就会发生重复了。所以要进行树层的去重。

树层如何去重呢?需要一个额外的数组记录每个数被使用的信息。当两个节点的值相等时,而且左侧节点的 used 数组为 false ,也就是没用过,表示这两个节点是同一个树层的关系。假如 used 数组为 true,表示这两个节点是同一个树枝的关系。
在这里插入图片描述

#include <algorithm>class Solution {
public:void backTracing(vector<int>& nums, int startIndex, vector<bool>& used, vector<int>& path, vector<vector<int>>& paths){paths.emplace_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.emplace_back(nums[i]);used[i] = true;backTracing(nums, i + 1, used, path, paths);path.pop_back();used[i] = false;}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {sort(nums.begin(), nums.end());vector<bool> used(nums.size(), false);vector<int> path;vector<vector<int>> paths;backTracing(nums, 0, used, path, paths);return paths;}
};

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

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

相关文章

SD-WAN为出海电商提供了什么支持

出海电商行业的持续发展与壮大&#xff0c;使得网络连接的稳定性和效率成为其成功的关键因素。SD-WAN&#xff08;软件定义广域网&#xff09;作为一种先进的网络解决方案&#xff0c;为出海电商提供了诸多优势和支持。 首先&#xff0c;SD-WAN通过智能路由技术&#xff0c;能够…

【MySQL学习】MySQL的慢查询日志和错误日志

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

MySQL典型示例

目录 1.使用环境 2.设计表 3.创建表 4.准备数据 5.查询 1.使用环境 数据库&#xff1a;MySQL 8.0.30 客户端&#xff1a;Navicat 15.0.12 2.设计表 假设我们已经建好了一个名为test的数据库。我们添加如下几个表&#xff1a;教师、课程、学生、班级、成绩。实体联系图设…

Java Web这一路走来

大部分Java应用都是Web或网络应用&#xff0c;MVC框架在Java框架中有着举足轻重的地位&#xff0c;一开始的Web应用并不现在这样子的&#xff0c;一步一步走来&#xff0c;每一步都经历了无数的血和泪的教训&#xff0c;以史为镜可以知兴替。 1. 草莽时代 早期的Java服务端技…

uni-app调用苹果登录,并获取用户信息

效果 模块配置 dev中的配置 需要开启登录的权限&#xff0c;然后重新下载配置文件&#xff0c;发布打包基座&#xff0c;再运行程序 代码 <button click"appleLogin">苹果登录</button>function appleLogin() {uni.login({provider: apple,success: …

《Git版本控制管理》笔记

第三章 起步 git --version查看版本号git --help查看帮助文档裸双破折号分离参数 git diff -w master origin – tools/Makefile将当前目录或任何目录转化为Git版本库 git init 初始化之后项目目录中&#xff0c;有名为.git的文件git status 查看git状态git commit 提供日志消…

vue vue3 日期选择的组件,封装组件

一、背景 基于element日期选择组件&#xff0c;自行封装了一个组件。 以下是达到的效果&#xff1a; 1.选择年&#xff0c;日期选择组件默认填充是&#xff1a;当时的年&#xff1b; 2.选择月&#xff0c;日期选择组件默认填充的是&#xff1a;当时的年月&#xff1b; 3.选择日…

微信小程序使用iconfont

进入iconfont&#xff0c;添加至项目 进入项目&#xff0c;点击生成代码&#xff0c;或更新代码 点击打开样式 复制内容到小程序的style文件夹下 最后引入到app.wxss

Redis-底层数据结构

Redis-底层数据结构 redisObject对象机制对象共享引用计数以及对象的消毁 动态字符串SDS链表链表的优缺点: 压缩链表ziplist的缺点 字典-Dictrehash渐进式rehash 整数集-intSet内存分布图整数集合的升级 跳表 - ZSkipList快表-quicklistlistpack redisObject对象机制 typedef s…

6端口百兆以太网交换机控制芯片//P 2 P RTL8306MB

JL5106-N064C是一款6端口快速以太网交换机控制器&#xff0c;将内存&#xff0c;6个mac和5个物理层收发器集成到单个芯片中&#xff0c;用于10Base-T和100Base-TX操作。 JL5106-N064C支持双MII/RMII接口&#xff0c;用于外部设备连接第6MAC、第5 MAC和第5 PHY。外部设备可以是路…

Pulsar服务端处理消费者请求以及源码解析

文章目录 引言正文处理消费请求回调处理总结 引言 处理读写是Pulsar服务端最基本也是最重要的逻辑&#xff0c;今天就重点看看服务端是如何处理的读请求也就是消费者请求 正文 Pulsar服务端处理消费者请求的流程大致如下图所示 消费者通过TCP向服务端发起消息拉取请求Brok…

idea开发 java web 高校学籍管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 高校学籍管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 css jq…

使用git 和 github协作开发

文章目录 github浏览器汉化插件github新建仓库git安装以及ssh配置团队创建及基本命令的使用创建团队基本命令 分支管理快速切换远程仓库地址 如何使用git && github进行协作开发&#xff0c;包括git常见基础命令 github浏览器汉化插件 在刚开始使用github的时候&#…

openGauss 5.0 单点企业版部署_Centos7_x86(上)

背景 通过openGauss提供的脚本安装时&#xff0c;只允许在单台物理机部署一个数据库系统。如果您需要在单台物理机部署多个数据库系统&#xff0c;建议您通过命令行安装&#xff0c;不需要通过openGauss提供的安装脚本执行安装。 本文档环境&#xff1a;CentOS7.9 x86_64 4G1…

物联网数据服务平台

随着物联网技术的迅猛发展&#xff0c;海量数据的产生和应用成为推动工业数字化转型的核心动力。在这个数据为王的时代&#xff0c;如何高效地收集、处理、分析并应用这些数据&#xff0c;成为了企业关注的焦点。物联网数据服务平台应运而生&#xff0c;为企业提供了全面、高效…

HTML - 请你说一下如何阻止a标签跳转

难度级别:初级及以上 提问概率:55% a标签的默认语义化功能就是超链接,HTML给它的定位就是与外部页面进行交流,不过也可以通过锚点功能,定位到本页面的固定id区域去。但在开发场景中,又避免不了禁用a标签的需求,那么都有哪些方式可以禁用…

IEC101、IEC103、IEC104、Modbus报文解析工具

一、概述 国际电工委员会第57技术委员会&#xff08;IEC TC57&#xff09;1995年出版IEC 60870-5-101后&#xff0c;得到了广泛的应用。为适应网络传输&#xff0c;2000年IEC TC57又出版了IEC 60870-5-104&#xff1a;2000《远东设备及系统 第5-104部分&#xff1a;传输规约-采…

基于SpringBoot+Vue+Mysql的图书管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

C++手撕红黑树

文章目录 红黑树概念性质&#xff08;条件限制&#xff09;节点的定义红黑树的结构红黑树的插入cur为红&#xff0c;p为红&#xff0c;g为黑&#xff0c;u存在且为红cur为红&#xff0c;p为红&#xff0c;g为黑&#xff0c;u不存在或u为黑&#xff0c;插入到p对应的一边cur为红…

深度评测2024年热门婴儿洗衣机,鲸立、希亦、小吉等品牌一网打尽!

为人父母&#xff0c;是一件非常美妙的事情&#xff0c;在养育新生命的过程中&#xff0c;细心的照顾是非常重要的&#xff0c;而最小的细节&#xff0c;就是让婴儿的衣服保持最温和、最有效的清洁。而婴儿洗衣机是当今不少家庭的福音&#xff0c;它给家长们带来了巨大的方便&a…