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

OpenCV 算法梳理分析 本文系统梳理了OpenCV的核心算法体系,从模块架构到具体函数实现。OpenCV采用分层设计,包含基础I/O、图像处理、特征检测、视频分析和智能算法五大层次,所有模块基于统一的Mat数据结构。重点分析了imgproc模块的8类图像处理算法(滤波、形态学、阈值化等),features2d模块的特征检测与匹配流程(SIFT/ORB等算法对比),以及objdetect、video、calib3d等模块的核心功能。针对不同场景提供了算法选型建议,如高斯噪声推荐GaussianBlur,特征匹配推荐ORB+Flann 阅读详情

93.复原IP地址 

题目链接/文章讲解:代码随想录

视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔哩_bilibili

首先设置path和结果列表

因为ip只能至多有12个数字,s大于12的话直接返回。 设置回溯方程(s和start_index,start_index为每次递归开始操作的index),如果当前path==4且start_index已经进行到最后s最后了 说明当前path是一个排列 ,放入res并返回。 如果path长度>4了 说明无需继续递归。然后设置for loop, 从start_index遍历到s,设置一个temp为start_index到i+1的s,如果当前这个temp满足条件=0或者在256和0之间且首字符不是0的话,叫他放进path里并递归,递归带入的参数是当前i的下一位 return回来时要注意回溯。 

最后返回值

class Solution(object):
    def __init__(self):
        self.path= []
        self.res = []
    def restoreIpAddresses(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        if len(s)>12:
            return
        def backtracking(s,start_index):
            if len(self.path)==4 and start_index == len(s):
                self.res.append(".".join(self.path))
                return 
            if len(self.path) > 4:
                return 
            for i in range(start_index,len(s)):
                temp=s[start_index:i+1]
                if (int(temp)<256 and int(temp)>0 and temp[0]!='0') or (temp=='0'):
                    self.path.append(temp)
                    backtracking(s, i+1)
                    self.path.pop()
        backtracking(s, 0)
        return self.res


78.子集 

题目链接:LeetCode - The World's Leading Online Programming Learning Platform

题目链接/文章讲解:代码随想录

视频讲解:回溯算法解决子集问题,树上节点都是目标集和! | LeetCode:78.子集_哔哩哔哩_bilibili

解题思路:

先建立列表path 和res。

设置回溯方程,因为没有重复元素,所以可以直接将当前path复制进res。 设置base condition 如果start_index 等于nums的长度的话,说明已经到达最后一个字符,可以返回。 再写for loop,从start_index到字符最后的的循环,append当前nums[i]进path,然后递归,递归返回后则回溯。 

返回res

class Solution(object):
    def __init__(self):
        self.path = []
        self.res = []
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        def backtracking(nums,start_index):
            self.res.append(self.path[:])
            if start_index == len(nums):
                return
            for i in range(start_index,len(nums)):
                self.path.append(nums[i])
                backtracking(nums,i+1)
                self.path.pop()

        backtracking(nums,0)
        return self.res    

90.子集II 

题目链接/文章讲解:代码随想录

视频讲解:回溯算法解决子集问题,如何去重?| LeetCode:90.子集II_哔哩哔哩_bilibili

解题思路:

首先建立列表path 和res。

为查重提前做准备sort nums

设置回溯方程,因为没有重复元素,所以可以直接将当前path复制进res。 设置base condition 如果start_index 等于nums的长度的话,说明已经到达最后一个字符,可以返回。 再写for loop,从start_index到字符最后的的循环,进行查重,如果当前i>start_index且当前数字等于前一个数字的话 就可以跳过。 查重后可以append当前nums[i]进path,然后递归,递归返回后则回溯。 

返回res

class Solution(object):
    def __init__(self):
        self.path=[]
        self.res=[]

    def subsetsWithDup(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        nums.sort()
        def backtracking(nums, start_index):
            self.res.append(self.path[:])
            if start_index == len(nums):
                return
            for i in range(start_index,len(nums)):
                if i > start_index and nums[i] == nums[i-1]:
                    continue
                self.path.append(nums[i])
                backtracking(nums,i+1)
                self.path.pop()
        backtracking(nums,0)
        return self.res

OpenSSL玩转证书链:从Windows CA根证书到签发多域名/IP的服务器证书全攻略 本文详细介绍了如何使用OpenSSL在Windows环境下构建私有CA体系,从创建CA根证书到签发支持多域名/IP的服务器证书的全流程。通过实战指南,读者可以掌握零成本证书管理技术,灵活配置SAN扩展,并了解在Nginx、Apache等主流服务器中的证书部署方法,适用于企业内网、IoT设备等HTTPS加密场景。 阅读详情

相关推荐

北斗导航 | 从零开始学习基于奇偶矢量的接收机自主完好性监测(RAIM)算法及改进

接收机自主完好性监测(Receiver Autonomous Integrity Monitoring, RAIM)是GNSS接收机内部的一种算法,它仅利用冗余的伪距观测量来判断定位结果是否可靠、是否存在故障卫星,并能识别和排除故障卫星。奇偶矢量法是RAIM最经典的实现方式之一,它将不可直接观测的测量误差映射到一个“奇偶空间”中,使故障检测变得简单且服从精确的概率分布。w\mathbf{w}w虽然能反映故障,但它的协方差矩阵不是单位阵,各分量相关,不利于统计检验。奇偶矢量通过一个正交变换P。

尘世冰封的专栏 377

代码随想录算法训练营28(回溯算法04 | 93.复原IP地址 78.子集 90.子集II

其实可以不需要加终止条件,因为startIndex >= nums.length,本层for循环本来也结束了。,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。子集问题,就是收集树形结构中,每一个节点的结果。本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了。要清楚子集问题和组合问题、分割问题的的区别,子集是收集树形结构中树的。求取子集问题,不需要任何剪枝!而组合问题、分割问题是收集树形结构中。中的去重逻辑,即可写出。树层去重,树枝不去重。

weixin_46743838的博客 1073

挂载(Mount)是什么意思

挂载 = 把一个存储设备或文件系统“接入”到现有的目录树,使其内容能够被访问。

天赐好车的博客 241

代码随想录算法训练营28| 93.复原IP地址 78.子集 90.子集II

题目链接。

weixin_74408291的博客 291

代码随想录算法训练营28 | 93.复原IP地址 78.子集 90.子集II

求排列问题的时候,就要从0开始,因为集合是有序的,{1, 2} 和{2, 1}是两个集合,排列问题我们后续的文章就会讲到的。其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。本题我们还需要一个变量pointNum,记录添加逗点的数量。如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,什么时候for可以从0开始呢?那么关于回溯算法中的去重问题,段位以0为开头的数字不合法。段位里有非正整数字符不合法。段位如果大于255了不合法。

m0_51671538的博客 174

代码随想录算法训练营28|93.复原IP地址 78.子集 90.子集II

代码随想录算法训练营28|93.复原IP地址 78.子集 90.子集II

weixin_60510462的博客 130

代码随想录算法训练营28 | 回溯算法part04: 93.复原IP地址 78.子集 90.子集II

随想录的没差,不过随想录是把这个:result.push_back(path);放在回溯函数第一行,另外主函数最开始还是记得做一下vec clear吧,养成好习惯。很简单捏,7min,越来越发现回溯真的很好写,尤其是牢记模板和递归三件套(确定递归函数的传递的参数,确定终止条件,确定进入下一层的逻辑和本层要处理的逻辑)不过记得这种问题path先用vec of str再转str比较好,就可以做push 和pop back。的思路也差不多,这个剪枝加在主函数里可以参考一下。,都是原vec里面有重复的,

weixin_51674457的博客 688

数据库连接算法详解:从基础概念到嵌套循环优化

2.重复键在归并连接中的处理:排序归并连接遇到相同键时,需要保存或回溯同一键对应的记录组,然后输出笛卡尔积。(2)外连接:即使一方没有数据,也保留该侧数据,用NULL填充。对S中的键计算哈希值;(3)连接基数:连接结果的行数可能远大于任意一张输入表。设外表有R个页面,内表S个页面,比较次数O(R+R*S)5.哈希连接的限制:最适用于等值连接,不直接适用于比较。(1)build阶段:对较小的关系R建立哈希表。(1)内连接:只保留两张表之中能够匹配的内容。若R有M行,S有N行,则比较次数为O(MN)

jiangxiaohanya的博客 244

小红书 算法一面 十一

例如 **Soft MoE** 采用这种方式,大幅提升负载均衡性,但会增加计算开销。- **熵正则化**:直接最大化门控概率分布的熵,熵越大表示分布越均匀,公式为 $\mathcal{L}_{ent} = -\frac{1}{N}\sum_{i=1}^N\sum_{k=1}^K p_{ik}\log p_{ik}$。- **核心原理**:源自 **GShard** 和 **Switch Transformer**,通过最小化专家选择概率分布的熵,迫使门控网络给每个专家分配相近的 token 数量。

XLYcmy的博客 441

【数据结构】排序算法:归并排序与基数排序

本文介绍了归并排序和基数排序两种非比较型排序算法。归并排序采用分治策略,通过递归分割与合并实现排序,时间复杂度稳定为O(nlogn),空间复杂度O(n),具有稳定性。基数排序则基于数字位数进行分配收集,时间复杂度O(d(n+r)),适用于固定位数的整数或字符串排序。文章通过示例详细说明了两者的执行过程,并对比了八大排序算法的关键特性,包括时间复杂度、空间复杂度和稳定性。最后通过典型例题展示了两种排序的应用场景和解题思路,强调归并排序的分治思想和基数排序的LSD实现是考试重点。(149字)

bianyuan172的博客 293

LeetCode 1. 两数之和 | 从暴力枚举到哈希表最优解 + 空间换时间思想全复盘

文章摘要 题目要求在数组中找到两数之和等于目标值的下标。核心思路是优化查找效率: 暴力法:双重循环枚举所有数对,时间复杂度O(n²),效率低但易实现。 哈希表优化:利用哈希表O(1)查找特性,遍历时存储已访问元素,每次计算差值并查询,时间复杂度降至O(n)。关键细节是先查后存,避免自匹配。 代码实现:哈希表法通过一次遍历完成,空间换时间,边界处理需注意空数组和不足两元素的情况。 常见错误:内层循环起始点、哈希表键值设计、立即返回结果等易错点需警惕。 面试要点:优先选择哈希表解法,解释与暴力法的差异,强调时间

yc2284238579的博客 263

算法日常・每日刷题--<BFS>4

题目摘要: 给定一个由'X'和'O'组成的矩阵,要求捕获所有被'X'完全包围的'O'区域(即不与边界连通的区域),并将其替换为'X'。解法核心是逆向处理: 标记边界连通区域:遍历矩阵四边,对边界上的'O'进行BFS/DFS,标记所有与之连通的'O'为临时符号(如'.'),表示这些区域未被包围。 批量修改:遍历整个矩阵,将未被标记的'O'(被包围的)改为'X',同时恢复标记的'.'为'O'。 示例: 输入: [['X','X','X','X'], ['X','O','O','X'], ['X','X','O'

2503_92261635的博客 259

10.LeetCode算法习题讲解--滑动窗口--最大连续为一的个数

利用滑动窗口解决最大连续1的个数

Jammy_1的博客 225

算法日常・每日刷题--<BFS&&最短路径>4

675. 为高尔夫比赛砍树 - 力扣(LeetCode)675. 为高尔夫比赛砍树 - 你被请来给一个要举办高尔夫比赛的树林砍树。树林由一个 m x n 的矩阵表示, 在这个矩阵中: * 0 表示障碍,无法触碰 * 1 表示地面,可以行走 * 比 1 大的数 表示有树的单元格,可以行走,数值表示树的高度每一步,你都可以向上、下、左、右四个方向之一移动一个单位,如果你站的地方有一棵树,那么你可以决定是否要砍倒它。你需要按照树的高度从低向高砍掉所有的树,每砍过一颗树,该单元格的值变为 1(即变为地面)。

2503_92261635的博客 207

S 曲线加减速算法完整详解(C# 原生实现,无第三方库)

S 曲线加减速是工业运动控制核心轨迹规划算法,相比梯形曲线,依靠约束加加速度 Jerk 实现加速度连续变化,有效消除机械冲击与振动。本文完整讲解七段式 S 曲线原理、阶段推演、时间预规划逻辑,剖析短行程自动裁剪等工程难点。提供无第三方依赖原生 C# 完整实现,内置运动状态机,支持正反方向运动,基于解析多项式实时求解位置、速度、加速度,无积分累积误差。代码可直接用于伺服上位机、模组轨迹发生器,亦可精简移植嵌入式平台。同时对比算法优劣与适用场景,适合工控开发、伺服调试、嵌入式运动算法学习者参考。

工业上位机开发工程师,专注C#底层算法与工控仪器开发。从零手写信号滤波、曲线拟合、机器视觉、排序与密码学哈希,纯原生实现零第三方库,附数学推导与可编译源码,可移植STM32/PLC。 988

Tokenization(分词算法):一切大语言模型的地基

本文深入解析了Tokenization(分词算法)这一大语言模型的基础技术。Tokenization将原始文本切分为模型可处理的子词单元并映射为数字ID,是模型理解文本的第一步。

2301_80194949的博客 205

041958210501891.rar_MATLAB工件尺寸测量_图像处理_工件_工件matlab_工件尺寸测量

通过MATLAB图像处理测量工件尺寸的测量,有优化的用户界面

上一篇: 代码随想录算法训练营第27天|● 39. 组合总和● 40.组合总和II● 131.分割回文串
下一篇: 代码随想录算法训练营第29天|491.递增子序列 46.全排列 47.全排列 II
小周小周考虑不周
博客等级 码龄6年 1粉丝 34原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值