当前位置: 首页 > news >正文

Day28 回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II

回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II

93. 复原 IP 地址

class Solution {
private:vector<string> result;bool isValid(string& s,int start,int end){if (start > end) return false;if (s[start] == '0' && start != end) { // 0开头的数字不合法 "0.1.2.201"特殊情况return false;}for (int i = start; i <= end; i++) {if (s[i] > '9' || s[i] < '0') { // 遇到非数字字符不合法return false;}}int num = stoll(s.substr(start,end-start+1)); //stoi会产生报错,out of rangeif(num>255) return false;return true;}
public:void backtracking(string& s,int startIndex,int pointSum){ //startIndex记录向下递归初始层,pointSum递归退出条件if(pointSum==3){if(isValid(s,startIndex,s.size()-1)) {result.push_back(s);return;}}for(int i = startIndex;i<s.size();i++){if(isValid(s,startIndex,i)){s.insert(s.begin()+i+1,'.');pointSum++;backtracking(s,i+2,pointSum);pointSum--;s.erase(s.begin()+i+1);}}}vector<string> restoreIpAddresses(string s) {if(s.size()>12||s.size()<4) return result; //剪枝backtracking(s,0,0);return result;}
};

78. 子集

class Solution {
private:vector<vector<int>> result;vector<int> path;
public:void backTracking(vector<int>& nums,int startIndex){result.push_back(path); // 收集子集,要放在终止添加的上面,否则会漏掉自己if(startIndex>=nums.size()) return; // 终止条件可以不加 forloop已经是退出循环条件了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) {backTracking(nums,0);return result;}
};

90. 子集 II

40.组合总和II+78. 子集,简单题叠加,直接上代码

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

相关文章:

Day28 回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II

回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II 93. 复原 IP 地址 class Solution { private:vector<string> result;bool isValid(string& s,int start,int end){if (start > end) return false;if (s[start] 0 && start ! end) { // 0开头的数…...

Linux系统常用的安全优化

环境&#xff1a;CentOS7.9 1、禁用SELinux SELinux是美国国家安全局对于强制访问控制的实现 1)永久禁用SELinux vim /etc/selinux/config SELINUXdisabled #必须重启系统才能生效2&#xff09;临时禁用SELInux getenforce #查看SELInux当前状态 setenforce 0 #数字…...

Vue-4、单向数据绑定与双向数据绑定

1、单向数据绑定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>数据绑定</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/…...

【Flutter 开发实战】Dart 基础篇:常用运算符

在Dart中&#xff0c;运算符是编写任何程序的基本构建块之一。本文将详细介绍Dart中常用的运算符&#xff0c;以帮助初学者更好地理解和运用这些概念。 1. 算术运算符 算术运算符用于执行基本的数学运算。Dart支持常见的加、减、乘、除、整除以及取余运算。常见的算数运算符如…...

C++:ifstream通过getline读取文件会忽略最后一行空行

getline是读取文件的常用函数,虽然使用简单,但是有一个较容易被忽视的问题,就是文件最后一行空行会被忽略。 #include <iostream> #include <fstream> #include <string> using namespace std;void readWholeFileWithGetline(string fileName) {string t…...

力扣123. 买卖股票的最佳时机 III

动态规划 思路&#xff1a; 最多可以完成两笔交易&#xff0c;因此任意一天结束后&#xff0c;会处于5种状态&#xff1a; 未进行任何操作&#xff1b;只进行了一次买操作&#xff1b;进行了一次买操作和一次卖操作&#xff1b;再完成了一次交易之后&#xff0c;进行了一次买操…...

Vue3:vue-cli项目创建

一、node.js检测或安装&#xff1a; node -v node.js官方 二、vue-cli安装&#xff1a; npm install -g vue/cli # OR yarn global add vue/cli/*如果安装的时候报错&#xff0c;可以尝试一下方法 删除C:\Users**\AppData\Roaming下的npm和npm-cache文件夹 删除项目下的node…...

C# .Net学习笔记—— 异步和多线程(Task)

一、概念 Task是DotNet3.0之后所推出的一种新的使用多线程的方式&#xff0c;它是基于ThreadPool线程进行封装的。 二、使用多线程的时机 任务能够并发运行的时候&#xff0c;提升速度&#xff1b;优化体验 三、基本使用方法 private void button5_Click(object sender, Ev…...

Python从入门到网络爬虫(读写Excel详解)

前言 Python操作Excel的模块有很多&#xff0c;并且各有优劣&#xff0c;不同模块支持的操作和文件类型也有不同。最常用的Excel处理库有xlrd、xlwt、xlutils、xlwings、openpyxl、pandas&#xff0c;下面是各个模块的支持情况&#xff1a; 工具名称.xls.xlsx获取文件内容写入…...

Mysql之子查询、连接查询(内外)以及分页查询

目录 一.案例&#xff08;接上篇博客&#xff09; 09&#xff09;查询学过「张三」老师授课的同学的信息 10&#xff09;查询没有学全所有课程的同学的信息 11&#xff09;查询没学过"张三"老师讲授的任一门课程的学生姓名 12&#xff09;查询两门及其以上不及格课程…...

计算机的存储单位

在计算机中&#xff0c;只能识别二进制。 byte是1个字节&#xff0c;是8个比特位&#xff0c;所以byte可以存储的最大值是&#xff1a;01111111&#xff0c;byte是 [-128 ~ 127] 共可以标识256个不同的数字。 1字节 8bit&#xff08;8比特&#xff09;--> 1byte 8bit 类…...

设备树文件中的设备节点

一. 简介 前面几篇文章学习了 关于设备树文件的编译&#xff0c;设备树文件的调用。 本文开始学习 设备树文件的语法。具体学习设备节点与标准属性。 二. 设备树文件之设备节点与标准属性 1. 设备节点 设备树 是采用树形结构来描述板子上的设备信息的文件&#xff0c;每…...

文件管理工具.netcore资源文件管理

文件管理工具 怎么快速有效的管理我的文件包括文件夹&#xff0c;需求功能是 模糊搜索显示匹配的文件夹或文件数据 快速打开文件夹位置 在windows直接查看搜索速度太慢&#xff0c;范围宽泛&#xff0c;整理所需资源文件名和文件本机路径保存在数据库&#xff0c;可以在数据库中…...

go-carbon v2.3.4 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库&#xff0c;支持链式调用。 目前已被 awesome-go 收录&#xff0c;如果您觉得不错&#xff0c;请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon 安装使用 Golang 版本大于…...

vue3 内置组件

文章目录 前言一、过渡效果相关的组件1、Transition2、TransitionGroup 二、状态缓存组件&#xff08;KeepAlive&#xff09;三、传送组件&#xff08;Teleport &#xff09;四、异步依赖处理组件&#xff08;Suspense&#xff09; 前言 在vue3中 其提供了5个内置组件 Transiti…...

MFC如何动态创建button按钮并添加点击事件

在MFC中&#xff0c;可以使用CButton类来动态创建按钮。下面是一个示例代码&#xff0c;演示了如何动态创建按钮并添加点击事件&#xff1a; 在对话框类的头文件中声明按钮变量&#xff1a; CButton m_btnDynamic;在对话框的OnInitDialog()函数中使用Create()函数创建按钮&am…...

Qt - QML框架

文章目录 1 . 前言2 . 框架生成3 . 框架解析3.1 qml.pro解析3.2 main.cpp解析3.3 main.qml解析 4 . 总结 【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 什么是QML&#xff1f; QML是一种用户界面规范和编程语言。它允许开发人员…...

Python+Flask+MySQL的图书馆管理系统【附源码,运行简单】

PythonFlaskMySQL的图书馆管理系统【附源码&#xff0c;运行简单】 总览 1、《的图书馆管理系统》1.1 方案设计说明书设计目标需求分析工具列表 2、详细设计2.1 登录2.2 注册2.3 程序主页面2.4 图书新增界面2.5 图书信息修改界面2.6 普通用户界面2.7 其他功能贴图 3、下载 总览…...

Module-Federation[微前端]

Module-Federation 微前端简介我们为什么没有延续使用【乾坤】使用Module-Federation 优/缺EMP 优EMP 缺图解DEMO详解`Tips:` [文件资源](https://download.csdn.net/download/alnorthword/88699315)微前端简介 微前端是借鉴了微服务的理念,将一个庞大的应用拆分成多个独立灵活…...

Spring 动态数据源事务处理

在一般的 Spring 应用中,如果底层数据库访问采用的是 MyBatis,那么在大多数情况下,只使用一个单独的数据源,Spring 的事务管理在大多数情况下都是有效的。然而,在一些复杂的业务场景下,如需要在某一时刻访问不同的数据库,由于 Spring 对于事务管理实现的方式,可能不能达…...

Solidity 智能合约入门:从 0 到 1 编写第一个区块链合约

一、什么是 Solidity&#xff1f; Solidity 是一门面向以太坊虚拟机&#xff08;EVM&#xff09;、静态类型的高级编程语言&#xff0c;专门用于编写区块链上的智能合约。 简单来说&#xff1a; 智能合约 运行在区块链上的自动执行代码&#xff08;无需第三方&#xff0c;代…...

嵌入式系统SOC验证与Linux实时补丁技术解析

嵌入式系统软件工程师面试技术要点解析 1. SOC原型验证技术体系 1.1 SOC验证工作内容与方法论 SOC原型验证是芯片设计流程中的关键环节&#xff0c;主要工作内容包括&#xff1a; 功能验证&#xff1a;确保设计符合规范要求 性能验证&#xff1a;评估系统吞吐量、延迟等指标…...

WSABuilds系统调用:Windows与Android内核交互机制解析

WSABuilds系统调用&#xff1a;Windows与Android内核交互机制解析 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root sol…...

3步在Mac上免费运行Stable Diffusion的终极指南

3步在Mac上免费运行Stable Diffusion的终极指南 【免费下载链接】MochiDiffusion Run Stable Diffusion on Mac natively 项目地址: https://gitcode.com/gh_mirrors/mo/MochiDiffusion 还在为寻找合适的Mac AI绘画工具而烦恼吗&#xff1f;想要完全离线生成惊艳的AI艺术…...

Gradio项目快速公网演示:除了share=True,你还有这几种轻量级内网穿透方案

Gradio项目快速公网演示&#xff1a;5种轻量级内网穿透方案横向评测 当你开发了一个酷炫的机器学习模型演示&#xff0c;或是精心设计的数据可视化界面&#xff0c;最迫切的需求往往是如何快速分享给同事或客户。Gradio的shareTrue参数可能是大多数开发者首先想到的方案&#x…...

编译原理避坑指南:自顶向下语法分析的5个常见错误及解决方法

编译原理避坑指南&#xff1a;自顶向下语法分析的5个常见错误及解决方法 第一次接触自顶向下语法分析时&#xff0c;我盯着那个无限循环的递归文法整整三天没想明白——为什么明明按照教材步骤操作&#xff0c;程序却始终报错&#xff1f;直到助教指出我忽略了间接左递归的隐蔽…...

告别树莓派溢价!Radxa ROCK 5A 8GB版开箱实测,652元真香体验与避坑指南

652元平替树莓派4B&#xff1f;Radxa ROCK 5A深度体验与实战避坑手册 当树莓派4B的价格突破900元大关时&#xff0c;许多开发者开始寻找更具性价比的替代方案。Radxa ROCK 5A的出现恰逢其时——这款搭载RK3588S芯片的单板计算机不仅性能翻倍&#xff0c;价格却仅为652元&#…...

Xenium空间原位转录组:从数据到生物学发现的实战解析

1. Xenium平台与空间原位转录组技术初探 第一次接触Xenium平台的数据时&#xff0c;我被它呈现的空间基因表达图谱震撼到了。想象一下&#xff0c;这就像给组织切片拍了一张"基因表达照片"&#xff0c;每个像素点都记录着成百上千个基因的活动状态。10x Genomics推出…...

解锁汽车ECU诊断新可能:ECUBus-Pro开源工具的全场景应用指南

解锁汽车ECU诊断新可能&#xff1a;ECUBus-Pro开源工具的全场景应用指南 【免费下载链接】ECUBus ECU bus tool, UDS over CAN, CAN-FD, Ethernet and so on. 项目地址: https://gitcode.com/gh_mirrors/ec/ECUBus ECUBus-Pro是一款功能强大的开源汽车ECU开发工具&#…...

从SolidWorks到Gazebo:手把手教你用SW2URDF插件为ROS2 Humble机械臂建模(含ROS2适配避坑指南)

从SolidWorks到Gazebo&#xff1a;ROS2 Humble机械臂建模全流程实战 1. 工业设计与机器人仿真的桥梁搭建 当机械工程师第一次接触机器人仿真时&#xff0c;往往会面临一个关键挑战&#xff1a;如何将精心设计的SolidWorks模型转化为可在Gazebo中运行的仿真模型&#xff1f;这个…...