代码随想录 Day 30 | 【第七章 回溯算法part 03】93.复原IP地址、78.子集、90.子集II

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

一、93.复原IP地址

本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了 

1. 题意

        有效的 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 地址。

2. 代码实现

(1)定义全局变量数组result存放合法的结果字符串。

(2)定义递归函数的参数和返回值:传入字符串s,start_index用于下层递归从哪里开始向后切割,pointSum表示一个合法的IP地址有四个整数,所以必须有3个逗号。

(3)确定终止条件:

        1)pointSum等于3的时候(此时树的深度为3),就停止递归。加了逗号之后,因为是对前面这个字符串进行合法性判断;此外还剩最后一段,需要对其进行合法性判断。

        2)对最后一段字符串进行合法性判断:if语句,调用自定义的合法性判断函数,传入字符串片段,以start_index作为分割线(起始位置),以len(s)-1为终止位置,左闭右闭区间。

        3)合法性判断函数:数字前不能有0,区间是0~255,子串里不可以有非法字符。

        4)如果合法,则收集这个字符串,最后返回。

(4)单层搜索逻辑:

        1)for循环:i 从start_index开始,到s字符串长度为止;

        2)进行合法性判断:传入左闭右闭区间,左区间start_index,右区间i。start_index固定,但i会向后移动,这个区间就是我们取出的子串。

        3)为子串加上一个逗号,插入到子串后的一个位置;

        4)pointSum加1。

        5)下一层递归:需要从i+2的位置开始,因为有一个逗号;

        6)回溯:去掉逗号,pointSum减去1。

class Solution:
    def is_valid(self, s, left, right):
        if left > right:
            return False
        if s[left] == '0' and left != right:
            return False
        num = 0
        for i in range(left, right + 1):
            if not s[i].isdigit():
                return False
            num = 10 * num + int(s[i])
            if num > 255:
                return False
        return True

    def backTracking(self, s, current, pointSum, start_index, result):
        if pointSum == 3:
            if self.is_valid(s, start_index, len(s)-1):
                current += s[start_index:]
                result.append(current)
            return
        for i in range(start_index, len(s)):
            if self.is_valid(s, start_index, i):
                sub = s[start_index : i+1]
                self.backTracking(s, current+sub+'.', pointSum+1, i+1, result)
            else:
                break

    def restoreIpAddresses(self, s: str) -> List[str]:
        result = []
        self.backTracking(s, '', 0, 0, result)
        return result

二、78.子集

子集问题,就是收集树形结构中,每一个节点的结果。 整体代码其实和 回溯模板都是差不多的。 

1. 和之前题目的不同

        每一层递归都有想要的结果,都需要加入结果集。

2. 代码实现

(1)定义一位数组path存放单个结果,二维数组result存放结果集。

(2)确定递归函数的参数和返回值:参数start_index表示本层递归从哪里开始取数,nums是传入的数组。

(3)确定终止条件:如果start_index大于等于nums数组的大小,那么终止递归,直接return。

(4)单层递归逻辑:for循环,将nums每个元素添加进入path,然后从i+1开始递归下一层,回溯将元素弹出。

class Solution:
    def backTracking(self, nums, start_index, path, result):
        result.append(path[:])

        if start_index >= len(nums):
            return

        for i in range(start_index, len(nums)):
            path.append(nums[i])
            self.backTracking(nums, i+1, path, result)
            path.pop()

    def subsets(self, nums: List[int]) -> List[List[int]]:
        result = []
        path = []
        self.backTracking(nums, 0, path, result)
        return result
        

三、90.子集II

之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。 

代码实现

class Solution:
    def backTracking(self, nums, start_index, used, path, result):
        result.append(path[:])
        if start_index >= len(nums):
            return
        for i in range(start_index, len(nums)):
            if i > 0 and nums[i] == nums[i-1] and not used[i-1]:
                continue
            path.append(nums[i])
            used[i] = 1
            self.backTracking(nums, i+1, used, path, result)
            used[i] = 0
            path.pop()

    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        used = [0] * len(nums)
        path = []
        result = []
        self.backTracking(nums, 0, used, path, result)
        return result

基于fMRI数据计算脑脊液(CSF)与全脑BOLD信号的时间耦合分析 BOLD和CSF信号有多相似CSF信号要延迟多少时间才能最匹配BOLD信号BOLD-CSF的互相关公式lag:时间延迟采样点数BOLD信号CSF信号延迟时间点对应的相关系数。 阅读详情

相关推荐

STM32F407-OV7670(无FIFO)-ONENET-实现摄像头画面上传到onenet(EDP协议)

EDP协议 EDP协议文档说明:https://leoeinstein.lanzous.com/ifX1Ckfkaaf 服务器登录 登录流程: (1)客户端发送连接请求(CONN_REQ) (2)服务器验证请求的合法性 (3)服务器发送一个回执(CONN_RESP)给客户端 其中请求包含三部分:消息头、选项和消息体。 1、消息头 包括消息的类型和剩余消息长度。 2、选项 包括协议名称、协议版本、连接标志、保持连接时间。 3、消息体 可能包含设备ID、用户ID(可选)、鉴权信息(看采取什么方式登录)。 设备

LiangWF22的博客 1万+

代码随想录 day28 第七章 回溯算法part04

● 93.复原IP地址。● 90.子集II。

weixin_60315213的博客 621

傻白入门芯片设计,指令集架构、微架构、处理器内核(十一)

通俗理解指令集架构、微架构和处理器内核的关系

qq_46675545的博客 6013

【随想录】Day28—第七章 回溯算法part04

子集II 与 子集 的区别在于,数组中存在重复元素,涉及重复元素的去重逻辑。startIndex 作用在于,告诉下一层递归从哪里开始取数。获取子串 ——> 判断子串是否合法 ——> 收集结果。本题思路属于切割问题,

weixin_44382896的博客 734

攻防世界:Crypto习题之easy_RSA

在非对称加密算法中,单向函数被广泛应用,用于确保从公钥加密后的密文无法轻易推导出私钥,从而保证数据的安全性。而其中最著名的算法便是 RSA 加密算法。首先设φm:=∣1≤k≤mgcdkm1∣为欧拉函数(Euler’sche Phi-function)。pqn:=pqpqφnnpqpqφnp−1q−1e∈12...φn−1gcdφne1ended≡1φn假设我们现在有明文x以及公钥en。

qq_52789488的博客 1572

4.4 线上vs离线:使用 Langfuse 实现智能体的全方位无死角评估

本文介绍了如何利用Langfuse工具实现AI智能体的全方位评估,包括线上和离线两种评估方式。线上评估通过收集用户实时反馈(如点赞/点踩)来监控真实表现,而离线评估则通过创建标准化数据集进行批量测试和自动评分。文章详细演示了如何为"旅小智"AI应用添加反馈功能、创建评估数据集,并利用Langfuse SDK进行自动化评估和分析。通过这两种评估方式的结合,开发者可以建立数据驱动的AI质量保障体系,实现持续优化和版本迭代。

yonggeit的博客 3312

第七章 回溯算法part03

本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了。

2401_88561446的博客 314

图像做旧算法原理及代码解释

该图像做旧算法主要通过一系列的图像处理操作来模拟旧照片的效果。整体流程包括:首先对输入图像进行颜色调整,降低饱和度并增加黄色调以营造出旧照片的色彩风格;接着添加高斯噪声来模拟旧照片可能存在的颗粒感;最后通过在图像上随机绘制线条来模拟旧照片的划痕和瑕疵。综上所述,该图像做旧算法通过对颜色的调整(包括饱和度降低、色相偏移)、添加高斯噪声以及模拟划痕和瑕疵等一系列操作,从多个方面模拟了旧照片的特征。

m0_44975814的博客 901

代码随想录算法训练营day 28|第七章 回溯算法part04

至于怎么去重,节省空间的方法是直接将给出的nums排序,使得集合中相等的数均相邻,这样每次只要在for循环(每次for循环选择的数字的是当前位置的候选数字)中判断当前的数字是否和下标-1的数字是否相等(比较必须前提是当前下标>begin),若相等就跳过。这道题我和文章的思路一样的,都是没有另外开辟空间来存储路径,直接看作给一段数字插入三个点,保证每个区段的数字都合法,一旦满足已经插入了三个点,那就直接判断剩下的数字是否满足要求,满足要求的就储存到res数组中。整体代码其实和 回溯模板都是差不多的。

mrmobi的博客 619

Python爬虫实战:亚马逊中国模拟登录与二次验证全解析(2026最新版)

在数据驱动的商业时代,亚马逊作为全球最大的电商平台,其商品数据、价格波动、评论信息、库存状态等对市场分析、竞品研究、价格监控具有极高的价值。然而,亚马逊的反爬虫机制堪称行业标杆——从请求指纹校验、动态令牌、行为分析到二次验证(2FA),层层设防。本篇文章将带你从零开始,使用2026年最新的Python技术栈,完整实现亚马逊中国(z.cn)的模拟登录,并攻克二次验证难题。郑重声明:本文仅限技术研究与个人学习用途,严禁用于批量抓取、价格劫持、账户爆破等违法违规行为。

2201_76125261的博客 378

2026年复旦微电数字IC笔试试卷带答案解析

摘要: 本文为复旦微电子MCU/SOC岗位笔试模拟题,涵盖单片机架构、数字电路、存储技术等核心知识点。内容包括: 单选题(30分):考察Cortex-M中断机制、时序分析(建立/保持时间)、逻辑化简、跨时钟域设计(格雷码应用)、存储器特性(NAND Flash操作单元)等; 波形分析(15分):聚焦D触发器行为、时钟分频、建立时间违例判断及跨时钟域同步; 多选题(25分):涉及亚稳态成因与处理、异步FIFO设计要点、MCU低功耗策略、NAND Flash特性及复旦微电市场地位; 简答题(20分):解析建立/

Open 344

代码随想录 day 24

本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/

2401_88561446的博客 401

通俗易懂的Harris 角点检测

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达Harris 角点检测 认为特征点具有局部差异性。如何描述“特征点具有局部差异性”:以每一个点为中心,取一个窗口,窗口大小为5*5...

3D视觉工坊 1473

代码随想录 | day 28 | 第七章 回溯part05 |93.复原IP地址 | 78.子集 | 90.子集II

【思考】每一条路径都被记录,不需要终止条件,简单题。【思考】本题和组合2异曲同工,用used去重。

2402_83072061的博客 321

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

代码随想录算法训练营DAY24第七章 回溯算法part03

【代码】代码随想录算法训练营DAY24第七章 回溯算法part03。

2401_88089822的博客 209

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

day 25 第七章 回溯算法part04代码随想录算法训练营71期

排序后相同的元素会相邻,便于在回溯过程中跳过重复元素。这是处理含重复元素组合/子集问题的标准预处理步骤。这是回溯算法中用于将当前元素加入临时路径的关键操作。

gu_xin_的博客 28

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 218

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 314

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 590

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 750

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 370

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 171

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 409

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 85

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 218
上一篇: 代码随想录 Day 29 | 【第七章 回溯算法 part02】39. 组合总和、40.组合总和II、131.分割回文串
下一篇: 代码随想录 Day 31 | 【第七章 回溯算法 part 04】491.递增子序列、46.全排列、47.全排列 II、总结
Accept17
博客等级 码龄4年 479粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值