代码随想录算法训练营第二十八天|93.复原IP地址 、78.子集、90.子集II

文章目录

  • [1.复原 IP 地址](https://leetcode.cn/problems/restore-ip-addresses/description/)
  • 2.子集
  • [3.子集 II](https://leetcode.cn/problems/subsets-ii/)


1.复原 IP 地址

在这里插入图片描述

切割问题可以使用回溯,本题分别两步,切割字符串和判断IP
切割逻辑如下:递归用来纵向遍历,for循环用来横向遍历,切割线(就是图中的红线)切割到字符串的结尾位置

在这里插入图片描述

代码如下

class Solution {
private:vector<string> result;void backtracking(string&s, int startIndex, int pointNum) {if (pointNum == 3) {if (isValid(s, startIndex, s.size() - 1 )) {result.push_back(s);}}for (int i = startIndex; i < s.size(); i++) {if(isValid(s, startIndex, i)) {s.insert(s.begin() + i + 1 , '.');pointNum++;backtracking(s, i + 2, pointNum);pointNum--;s.erase(s.begin() +i + 1);}else break;}}bool isValid (string& s, int start, int end) {//判断有效IPif (start > end) return false;if (s[start] == '0' && start != end) 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;} 
public:vector<string> restoreIpAddresses(string s) {result.clear();if (s.size() < 4 || s.size() > 12) return result; // 剪枝了backtracking(s, 0, 0);return result;}
};

2.子集

在这里插入图片描述

分割问题找树的叶子节点
回溯法
在这里插入图片描述

代码如下

class Solution {
private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums, int startIndex) {result.push_back(path); if (startIndex > nums.size()) {//startIndex已经大于数组的长度为终止return;}for (int i = startIndex; i < nums.size(); i++) {path.push_back(nums[i]);backtracking(nums, i + 1);path.pop_back();}}
public:vector<vector<int>> subsets(vector<int>& nums) {result.clear();path.clear();  backtracking(nums, 0);return result;}
};

3.子集 II

在这里插入图片描述

只比78.子集多了一个去重,我们要去掉同一树层的相同元素,保留同一树枝的。如下图

在这里插入图片描述

代码如下

class Solution {
private:vector<vector<int>> result;vector<int> path;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();}}
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {result.clear();path.clear();  vector<bool> used(nums.size(), false);backtracking(nums, 0, used);return result;}
};

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

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

相关文章

Python中学习调试requests模块时出现的大坑(1)

为防止迷路: 学习机械相关,请关注公众号:南大盛联 学习软件,硬件,请关注公众号号:一训微课 cmd模式下 不知道上面这行的话,需要补课。 pip install requests 这个不知道的话,也要补课 pip是python的安装工具。 install是安装的意思 requests是我们需要安装的模…

【InternLM 笔记】使用InternStudio 体验书生·浦语2-chat-1.8b随记

书生浦语2-chat-1.8b 介绍 书生浦语-1.8B (InternLM2-1.8B) 是第二代浦语模型系列的18亿参数版本。为了方便用户使用和研究&#xff0c;书生浦语-1.8B (InternLM2-1.8B) 共有三个版本的开源模型&#xff0c;他们分别是&#xff1a; InternLM2-1.8B: 具有高质量和高适应灵活性…

MSA-GCN

Combined Phenotypic Measure Selection and Weight Encoder(CSWE) AL: aggregation layer&#xff0c;final node representation h ( f i n a l ) h^{(final)} h(final) 作者未提供代码

MybatisPlus(SpringBoot版)的通用枚举和代码生成器、多数据源配置

目录 续前面 一、通用枚举 二、代码生成器 三、多数据源配置 一、通用枚举 定义枚举类&#xff1a; package com.qcby.SpringBoot.enums;import com.baomidou.mybatisplus.annotation.EnumValue; import lombok.Getter;Getter public enum SexEnum {MALE(1, "男"…

YOLO算法

YOLO介绍 YOLO&#xff0c;全称为You Only Look Once: Unified, Real-Time Object Detection&#xff0c;是一种实时目标检测算法。目标检测是计算机视觉领域的一个重要任务&#xff0c;它不仅需要识别图像中的物体类别&#xff0c;还需要确定它们的位置。与分类任务只关注对…

Centos6安装PyTorch要求的更高版本gcc

文章目录 CentOS自带版本安装gcc 4的版本1. 获取devtoolset-8的yum源2. 安装gcc3. 版本检查和切换版本 常见问题1. 找不到包audit*.rpm包2. 找不到libcgroup-0.40.rc1-27.el6_10.x86_64.rpm 的包4. cc: fatal error: Killed signal terminated program cc1plus5. pybind11/pybi…

探索数据结构:深入了解顺序表的奥秘

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元…

mitmproxy代理

文章目录 mitmproxy1. 网络代理2. 安装3. Https请求3.1 启动mitmproxy3.2 获取证书3.3 配置代理3.4 运行测试 4. 请求4.1 读取请求4.2 修改请求4.3 拦截请求 5. 响应5.1 读取响应5.2 修改响应 6. 案例&#xff1a;共享账号6.1 登录bilibili获取cookies6.2 在代理请求中设置cook…

性能优化篇(二) 静态合批步骤与所有注意事项\游戏运行时使用代码启动静态合批

静态合批步骤: 1.开启Project Settings —>Player–>Other Setting里勾选Static Batching选项(一般情况下unity都是默认勾选状态) 2.勾选需要合批的静态物体上的Batching Static项,勾选后此物体下的所有子物体都默认参与静态合批(勾选后物体不能进行移动/旋转/缩放操作,…

逻辑回归与决策边界解析

目录 前言1 逻辑回归基础1.1 Sigmoid函数&#xff1a;打开分类之门1.2 决策函数&#xff1a;划定分类界限1.3 逻辑回归详解 2 决策边界2.1 线性决策边界2.2 非线性决策边界2.3 决策边界的优化 3 应用与实例3.1 垃圾邮件分类&#xff1a;精准过滤3.2 金融欺诈检测&#xff1a;保…

揭示IP风险画像的作用与价值

在当今数字化时代&#xff0c;互联网的快速发展为企业和个人带来了巨大的机遇&#xff0c;同时也带来了各种安全风险和威胁。随着网络攻击手段的不断升级和演变&#xff0c;传统的安全防御手段已经无法满足对抗复杂多变的网络威胁的需求。IP风险画像作为一种新型的网络安全解决…

MYSQL的优化学习,从原理到索引,在到事务和锁机制,最后的主从复制、读写分离和分库分表

mysql的优化学习 为什么选择Mysql不选择其他的数据库&#xff1f;还有哪些&#xff0c;有什么区别&#xff1f; Mysql&#xff1a;开源免费版本可用&#xff0c;适用于中小型应用 Oracle&#xff1a;适用于大型企业级应用&#xff0c;复杂的业务场景和大量数据的处理&#xf…