代码随想录打卡第二十五天
代码随想录–回溯部分
day 24 休息
day 25 回溯第三天
文章目录
- 代码随想录--回溯部分
- 一、力扣93--复原IP地址
- 二、力扣78--子集
- 三、力扣90--子集Ⅱ
一、力扣93–复原IP地址
代码随想录题目链接:代码随想录
有效 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 中的任何数字。你可以按 任何 顺序返回答案
简单来说就是穷举,把一个数组按照规则分成四串,所有的可能性
类似分割回文串,但是需要修改“回文串”的判断逻辑
把切下来的子串用于判断,当其开头不是0且整体在0-255之间,则可以下一步递归,否则不递归
代码如下:
class Solution {
public:vector<string> result;bool isValid(const string s){int num = 0;if (s.size() > 1 && s[0] == '0'|| !s.size()) return false;else {for (int i = 0; i < s.size(); i++) {if (s[i] > '9' || s[i] < '0') return false;num = num * 10 + (s[i] - '0');if (num > 255) { return false;}}if(num > 255 || num < 0) return false;return true;}}void backTracking(string & s, int startIndex, int pointNum){if(pointNum == 3){string temp = string(s.begin() + startIndex, s.end());if(isValid(temp)){result.push_back(s); }return;}for(int i = startIndex; i < s.size(); i ++){string test = string(s.begin() + startIndex, s.begin() + i + 1);if(isValid(test)) {s.insert(s.begin() + i + 1, '.');pointNum ++;backTracking(s, i + 2, pointNum);s.erase(s.begin() + i + 1);pointNum --;}else break;}}vector<string> restoreIpAddresses(string s) {if (s.size() < 4 || s.size() > 12) return result;backTracking(s, 0, 0);return result;}
};
切割字符串这里需要注意,是左闭右开的
所以是startIndex + i + 1
二、力扣78–子集
代码随想录题目链接:代码随想录
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的
子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
非常像力扣77–组合的问题,只不过是k在动态的变化
只要在判断return的条件上修改一下就行了
不再需要判断是否能够加入result中,也不用中断后续的递归,只管让代码运行即可
这样就能做到遍历完整的树,每次回溯都需要把自身加入结果中,不需要判断了
代码如下:
class Solution {
public:vector<int> path;vector<vector<int>> result;void backTracking(vector<int> & nums, int startIndex){result.push_back(path);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;}
};
输入
nums =[1,2,3]
输出
[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]
从输入输出也能看出回溯的顺序,先是搜索完1向下的一整串,返回后从2继续向下搜索
所以每层都需要记录自己,不然会漏掉
三、力扣90–子集Ⅱ
代码随想录题目链接:代码随想录
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的
子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
不同于子集,这次给的num会存在重复数字,输出要去重
思想和组合总和Ⅲ是一样的,对nums排序,并且通过used数组记录回溯层数
这样判断前一位和后一位是否相同且是否在一层,就可以做到去重复了
代码如下:
class Solution {
public:vector<int> path;vector<vector<int>> result;vector<bool> used;void backTracking(vector<int> & nums, int startIndex){result.push_back(path);for(int i = startIndex; i < nums.size(); i ++){if(i > 0 && nums[i] == nums[i - 1] && !used[i-1]) continue;path.push_back(nums[i]);used[i] = true;backTracking(nums, i + 1);path.pop_back();used[i] = false;}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {sort(nums.begin(), nums.end());used = vector<bool>(nums.size(), false);backTracking(nums, 0);return result;}
};
相关文章:
代码随想录打卡第二十五天
代码随想录–回溯部分 day 24 休息 day 25 回溯第三天 文章目录 代码随想录--回溯部分一、力扣93--复原IP地址二、力扣78--子集三、力扣90--子集Ⅱ 一、力扣93–复原IP地址 代码随想录题目链接:代码随想录 有效 IP 地址 正好由四个整数(每个整数位于 0…...

openharmony上传图片,并获取返回路径
适用条件: openharmony开发 4.0 release版本,对应能力API10 一直不断尝试,一会用官方提供的上传文件,一会用第三方库的axios都不行, 一会报错‘没权限,一会报错’路径错误,还有报错‘401参数错…...

git常用命令及git分支
git常用命令及git分支 git常用命令设置用户签名初始化本地库查看本地库状态将文件添加到暂存区提交到本地库查看历史记录版本穿梭 git分支什么是分支分支的好处分支的操作查看分支创建分支切换分支删除分支合并分支合并冲突 git常用命令 设置用户签名 //设置用户签名 git con…...
c# 依赖注入-服务的生命周期
在 C# 中,依赖注入服务的生命周期指的是在应用程序中管理和控制依赖项注入服务对象的生命周期的方式。常见的生命周期包括瞬态(transient)、作用域(scoped)和单例(singleton)三种。 瞬态&#…...

一站式短视频矩阵开发,高效托管!
短视频矩阵系统源码SaaS解决方案提供全面的开发服务,包括可视化视频编辑、矩阵式内容分发托管以及集成的多功能开发支持。 短视频矩阵:引爆您的数字营销革命 短视频矩阵系统是一套多功能集成解决方案,专为提升在短视频平台上的内容创作、管理…...

实践致知第16享:设置Word中某一页横着的效果及操作
一、背景需求 小姑电话说:现在有个word文档,里面有个表格太长(如下图所示),希望这一个设置成横的,其余页还是保持竖的! 二、解决方案 1、将鼠标放置在该页的最前面闪烁,然后选择“页面”》“↘…...

Leetcode—3011. 判断一个数组是否可以变为有序【中等】(__builtin_popcount()、ranges::is_sorted())
2024每日刷题(144) Leetcode—3011. 判断一个数组是否可以变为有序 O(n)复杂度实现代码 class Solution { public:bool canSortArray(vector<int>& nums) {// 二进制数位下1数目相同的元素就不进行组内排序// 只进行分组// 当前组的值若小于…...

盲盒一番赏小程序:开启惊喜之旅,探索无限创意!
在这个充满无限想象与惊喜的时代,盲盒已成为连接心灵与梦想的奇妙桥梁。为了将这份独特的乐趣与探索精神传递给每一位热爱生活、追求新鲜的你,我们自豪地推出了“盲盒一番赏”小程序——一个集创意、趣味、互动与社交于一体的盲盒新纪元,邀您…...

Linux基础知识之Linux文件系统权限
概述 文件权限控制对文件的访问可以针对文件所属用户、所属组和其他用户可以设置不同的权限权限具有优先级。user 权限覆盖 group 权限,后者覆盖 other 权限 权限:读取、写入和执行 权限 对文件的影响 对目录的影响 r (读取) 可以读取文件的内容 …...
Qt qml详细介绍
一.基本类型 QML的基本类型包括了很多不同的类型,这些类型可以用于定义用户界面元素、属性和信号。以下是一些常用的QML基本类型及其详细介绍: 数值类型:包括整数类型(int、uint、short、ushort等)和浮点数类型&#…...

深度解析:如何优雅地删除GitHub仓库中的特定commit历史
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
JS之短路操作符
短路操作符(Short-circuit Operator)是 JavaScript 中的一个概念,这些操作符同样适用于 TypeScript,因为 TypeScript 是 JavaScript 的类型超集。短路操作符主要包括逻辑“与”(&&)和逻辑“或”&am…...

【Linux】安装PHP扩展-redis
说明 本文档是在centos7.6的环境下,安装PHP7.4之后,安装对应的PHP扩展包redis。 一、下载redis扩展 pecl官方地址:PECL :: The PHP Extension Community Library 下载的版本是:redis-5.3.7.tgz 二、安装redis扩展 1.上传 redis 压缩包到…...

内衣洗衣机怎么选?分享五款人气巅峰机型,选对不选贵
随着科技的不断发展,内衣裤洗衣机成为了家庭必备的家电之一。选择一个好的品牌对于日后的使用体验至关重要。市场上内衣洗衣机型号繁多,究竟哪个牌子好用呢?下面给大家分享五款无论是口碑还是价格,都称得上是公认好用又实惠的内衣…...

OpenMesh入门,安装,运行示例Hello World
安装 环境 win10,qt5 源码下载编译 进入OpenMesh官网OpenMesh官网 https://www.graphics.rwth-aachen.de/software/openmesh/download/ 使用cmake gui 注意:先安装qt5 使用 CMake-Gui 构建 vs 2019 项目 注意 where is the source code 是<project…...
std::env是什么库?|Python一对一教学答疑
你好,我是悦创。 std::env 是 Rust 标准库中的一个模块,提供了访问操作系统环境的功能,比如处理环境变量、程序参数等。这个模块包含了一系列的函数和类型,用于管理与程序执行环境相关的信息。以下是 std::env 模块提供的一些主要…...

Go语言--广播式并发聊天服务器
实现功能 每个客户端上线,服务端可以向其他客户端广播上线信息;发送的消息可以广播给其他在线的客户支持改名支持客户端主动退出支持通过who查找当前在线的用户超时退出 流程 变量 用户结构体 保存用户的管道,用户名以及网络地址信息 typ…...

Spring MVC 全注解开发
1. Spring MVC 全注解开发 文章目录 1. Spring MVC 全注解开发2. web.xml 文件 的替代2.1 Servlet3.0新特性2.2 编写 WebAppInitializer 3. Spring MVC的配置3.1 Spring MVC的配置:开启注解驱动3.2 Spring MVC的配置:视图解析器3.3 Spring MVC的配置&…...

MQTT——Mosquitto使用(Linux订阅者+Win发布者)
前提:WSL(Ubuntu22)作为订阅者,本机Win10作为发布者。 1、Linux安装Mosquitto 命令行安装。 sudo apt-get install mosquitto 以上默认只安装了mosquitto的服务,不带测试客户端工具mosquitto_sub和mosquitto_pub。如…...

ArcGIS识别不GDB文件地理数据库显示为空?
点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 我们经常会碰到拷贝的GDB文件ArcGIS无法识别,软件只是把他当做普通的文件夹去看待&am…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...