LeetCode 91,点赞和反对五五开,这题是好是坏由你来评判

零基础转行数据科学的4条实战路径指南 数据科学入门不是从Python语法或机器学习算法开始,而是一种面向真实问题的工程化思维训练。其核心在于理解业务语义、构建可验证假设、设计可落地的数据链路,并通过最小可行项目建立正向反馈。对于零基础转行者,关键不在于掌握多少工具,而在于能否快速识别自身最痛的业务瓶颈,并用适配的学习路径将其转化为可量化的效率提升或决策支持。本文聚焦数据科学入门路径与实战能力构建两大热词,系统拆解四类典型起点人群(业务岗、工程师、数理背景、完全零基础)对应的能力跃迁逻辑、技术选型优先级与常见认知陷阱,强调技能组合设计应服务于具体 阅读详情

本文始发于个人公众号:TechFlow,原创不易,求个关注


今天是LeetCode专题的第57篇文章,我们一起来看看LeetCode第91题,解码方法(Decode ways)。

这道题官方给定的难度是Medium,点赞2680,反对2845,通过率24.5%。从通过率上来看这道题似乎很难,甚至比很多Hard难度的问题还要难。从点赞和反对的数量来看,这道题应该算是褒贬不一,两边阵营的人数都很多。一般来说题目的评价都是一边倒为主,这种情况很少出现。首先值得一说的是,这道题我个人肯定认为是值得一做的,至于它是否是一道好问题呢?这个问题就留给大家自己回答吧。

首先我们来看下这道题的题意。


题意


在传送消息的时候我们可以把字母映射成数字,比如A映射成1,B映射成2,Z映射成26。我们这里假设用到的字母只有大写的,也就是说我们用26个数字就可以代表A到Z的所有字母。

现在我们得到了一串数字连成的字符串,想要将它还原成原本字母组成的信息,请问它一共有多少种还原的方法?


样例


Input: "12"
Output: 2
Explanation: It could be decoded as "AB" (1 2) or "L" (12).
Input: "226"
Output: 3
Explanation: It could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).

题解


我们观察一下样例,比如12可以理解成12这个字符也就是L,也可以理解成1和2两个字符拼接而成。同样226有三种还原的方法,分别是(2, 2, 6), (22, 6), (2, 26)。我们只需要返回所有可能的数量即可。

这道题看起来没有头绪,但是当我们仔细分析一下其中的情况,其实并不复杂。首先对于字符串当中的每一位来说,只有0到9这10种可能性。我们逐一来考虑,首先如果是0,由于我们的A映射的是1,所以0只能和前面一个数字凑成10或者是20,如果前一位不是1或者是2,那么说明这个字符串是非法的,也就是没有办法还原。

如果某一位是1-9当中的数字,它都可以单独成为一个字母。我们再考虑它的前一位,它的前一位只有1和2这两种可能可以构成新的组成。这里要注意,如果它的前一位是2的话,那么当前位必须要小于6,因为英文字母最多只到26。所以这里也需要进行一个特殊判断,除此之外,就没有其他情况了。

这些可能性都列举出来之后,剩下的就简单了,比如我们可以用深搜来搜索所有解的可能性。由于我们已经列举出了所有的情况,所以这段代码并不难写,但是想要一次就写对也不容易。

class Solution:
    def numDecodings(self, s: str) -> int:
        n = len(s)
        ret = 0
        
        def dfs(i):
            nonlocal ret
            
            if i >= n:
                ret += 1
                return 
            
            # 当前位如果是0则说明无解,return
            # 当前位为0说明上一位不是1或者2
            if s[i] == '0':
                return
            
            # 递归单个的情况
            dfs(i+1)
            
            # 判断下一位能否构成组合
            if i+1 < n and (s[i] == '1' or (s[i] == '2' and ord(s[i+1]) <= ord('6'))):
                dfs(i+2) 
                
        dfs(0)
        return ret

搜索算法固然可以解,但是一定会超时。这一点也不难想明白,当我们的字符串长度大了之后,带来的解的可能性是非常多的。最极端的情况下,比如每一位都是1,它都可以单独作为一个字符也可以和下一位组合成11构成新的字符。这样的情况总数是以斐波那契数列递增的,n不需要多大带来的解的数量就是天文数字了。

使用搜索算法我们需要穷举每一种情况,哪怕寻找每一个解只需要O(1)O(1)O(1)的复杂度也是无法抗住的。

所以我们必须要想一些更优的方法,这个方法也不难想,就是动态规划。

我们分析一下会发现每一位数字能够组成的解只和它的前一位有关,和后面的都没有关系。这样的话显然是满足动态规划的无后效性的。也就是说前面的字符组合的情况不会影响后面的解。

我们假设dp[i]存储的是前i个数字构成的解的数量,对于s[i]来说有10种情况,分别是0到9。如果s[i]为0,那么s[i-1]如果是1或者是2的话,只有一种情况,就是0和s[i-1]组成10或者是20。那么dp[i] = dp[i-2]。

如果s[i]不为0,那么s[i]可以选择单独成为一个字符,那么dp[i] = dp[i-1]。当然如果s[i-1]是1或者是2的话,s[i]也可以选择和s[i-1]合起来组成一个字符。那么这样的情况下,dp[i]需要再额外增加dp[i-2],也就是dp[i]构成的答案可能性增加了。

如果把这些状态之间的转移情况都梳理清楚了,那么这个代码肯定不难写的。

class Solution:
    def numDecodings(self, s: str) -> int:
        n = len(s)
        # 为了简化判断,我们把s前面加上0,这样字符串下标从1开始
        s = '0' + s
        dp = [0 for _ in range(n+2)]
        
        dp[0] = 1
        for i in range(1, n+1):
            # 如果当前位0,那么判断前一位是否是1或2
            # 否则一定无解
            if s[i] == '0':
                if i > 1 and s[i-1] in ('1', '2'):
                    dp[i] = dp[i-2]
                else:
                    return 0
                continue
            dp[i] = dp[i-1]
            # 能和前一位构成字符,那么加上dp[i-2]的数量
            if i > 1 and s[i-1] == '1' or s[i-1] == '2' and ord(s[i]) <= ord('6'):
                dp[i] += dp[i-2]
        return dp[n]

总结


从动态规划的角度上来看,这道题并不算困难,说是迎刃而解也不为过。但如果没有想到动态规划,纠结于搜索算法的话那么可能一直都没有办法AC。

我不清楚给差评的是否都是后一种情况,但单纯从题目的质量上来说,这道题的质量是不错的,是一道很不错的联系动态规划的习题,因此建议大家有时间都能体会一下。

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

在这里插入图片描述

LLM基准测试避坑指南:从考试分数到业务服务的评估重构 大语言模型(LLM)评估本质上是验证模型在真实任务中的服务能力,而非单纯的知识记忆或解题技巧。当前主流benchmark如MMLU、HumanEval和Chatbot Arena,多基于静态选择题、算法题或短文本盲评,其命题逻辑与政务问答、金融合规、医疗咨询等开放性、强约束、高时效的工程场景存在根本断裂。尤其当模型在MMLU上高分却无法准确输出办理地址,或在HumanEval中pass@k优异却漏掉API重试逻辑时,暴露的是评估范式对‘任务结构’与‘服务契约’的系统性忽视。本文聚焦LLM落地中的可测量断点, 阅读详情

相关推荐

大模型舆论场分析:如何识别GPT-5混合评价中的真实信号

大模型技术演进已从单纯参数竞赛转向舆论认知博弈。当GPT-5尚未正式发布,媒体、开发者、企业与学术界却已构建出四个平行宇宙式的解读框架,其本质是技术确定性与商业可行性之间的结构性错位。理解这种‘混合评价’现象,需回归基础:大模型的工程化落地能力(如确定性输出、私有化部署、低延迟响应)往往比理论推理指标更具产业价值;而舆论噪音的泛滥,恰恰映射出AI技术成熟度曲线中‘爬升期’特有的判断失焦。本文基于真实项目验证,拆解可信度衰减、话术陷阱与三维评价坐标系等实操方法,帮助CTO、产品经理与一线工程师在GPT-5预期

weixin_33735077的博客 446

LeetCode Top 100 Liked 点赞最高的 100 道算法题

作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:刷题顺序,刷题路径,好题,top100,怎么刷题,Leetcode, 力扣,Python, C++, Java 大家好,相信很多朋友在刷题时,看到 LeetCode 的 2000 多道题目,有点手足无措,非常需要一个刷题的顺序和清单。 我整理了在 LeetCode(中文版)上点赞数前 100 的题目,这些的题目基本都在千赞以上,全部都是好题。 举个例子,1. Two

负雪明烛 5941

Software 3.0:从手写代码到数据驱动的范式迁移

Software 3.0代表软件开发范式的根本性演进,其核心是将传统编程逻辑让渡给大模型驱动的自动化生成过程。它并非简单替代,而是基于任务可学习性与可泛化性,在业务逻辑层实现高效覆盖。原理上依赖高质量指令微调数据、确定性代码沙箱与人类反馈强化学习三大基础设施;技术价值在于大幅压缩MVP交付周期、降低胶水层与策略层开发成本;典型应用场景包括API客户端生成、促销规则翻译、合规性代码产出等。当输入输出结构清晰、变更频繁且无强实时约束时,即进入Software 3.0高就绪区——这正是当前企业落地代码生成与RAG

cigang4063的博客 672

刷完 900 多道算法题的首次总结:LeetCode 应该怎么刷?

LeetCode 算法题应该怎么刷?算法题学习路线?怎么组队刷题?有没有算法刷题群? 你是怎么入门 LeetCode 的?刷完 1000 道算法题是什么体验?大家都是怎么刷题的? 新手小白开始刷算法题应该怎么刷,注意什么?刷 LeetCode 总是觉得太难怎么办? 刷算法题有没有书籍推荐?该按照什么顺序刷算法题?LeetCode 怎么看别人的题解?有哪些好的算法题博主推荐?

负雪明烛 13万+

AI产品化实战:从LLM落地到商业闭环的完整路径

大语言模型(LLM)已从技术概念进入规模化应用阶段,其核心价值不在于参数规模或榜单排名,而在于能否稳定、可控、低成本地嵌入真实业务流程。理解LLM需回归工程本质:它是一个受输入约束、输出可校验、资源可计量的智能函数;产品化则要求将模糊需求拆解为可监控、可替换、可计费的原子能力;而AI教学的关键,在于构建认知脚手架,让工程师从‘调参直觉’转向‘确定性设计’。本文聚焦AI从业者的日常战场——prompt防御体系、QLoRA微调、K3s轻量部署、多维效果评估与反馈闭环,覆盖从括号编码bug到商业采纳率提升的全链路

weixin_34268843的博客 410

LeetCode37 使用回溯算法实现解数独,详解剪枝优化

本文始发于个人公众号:TechFlow,原创不易,求个关注 数独是一个老少咸宜的益智游戏,一直有很多拥趸。但是有没有想过,数独游戏是怎么创造出来的呢?当然我们可以每一关都人工设置,但是显然这工作量非常大,满足不了数独爱好者的需求。 所以常见的一种形式是,我们只会选择难度,不同的难度对应不同的留空的数量。最后由程序根据我们选择的难度替我们生成一个数独问题。但是熟悉数独的朋友都知道,并不是所有的数独...

TechFlow的博客 1120

从力扣出发,接触算法 Leetcode 1 两数相加

见微知著,是我主张的学习思路,虽然很难想象有人会在2026年去讲 leetcode 001,但是从另一个角度或许我们能够更好的体会到AI时代为什么 算法题在面试和证明个人编程水平上仍旧是不可或缺的一部分。

2402_87712665的博客 884

LeetCode 93 | 生成所有有效的IP地址

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第59篇文章,我们一起来看看LeetCode第93题,有效ip地址(Restore IP Addresses)。 这题的官方难度是Medium,点赞1296,反对505,通过率35.4%。从各项指标来说看起来有些中规中矩,实际上也的确如此。这道题的解法和立意都有些显得新意不足,但总体来说题目的质量还是可以的,值得一做。 题意 给定一个由数字组成的字符串,我们希望通过这个字符串得到所有有效ip地址的组合。对于一个有效

TechFlow的博客 997

AI时代算法面试变革:GPT-4解题能力实测与趋势分析

算法作为计算机科学的核心基础,其评估方式正随着AI技术的发展发生根本性变革。传统算法面试通常考察手写代码和解题速度,而现代大语言模型如GPT-4已能解决82%以上的LeetCode难题。这促使我们重新思考技术评估的本质:从代码实现能力转向系统设计、问题分析和工程实践等更高阶技能。通过构建自动化测试框架,实测发现AI在动态规划、图论等题型中表现优异,但在边界条件处理和隐含需求理解上仍有不足。这种技术演进正在重塑技术招聘,推动面试形式从白板编程向代码审查、架构设计等更贴近实际工作的模式转变。对于开发者而言,掌握

weixin_33851429的博客 397

LeetCode29 Medium 不用除号实现快速除法

本文始发于个人公众号:TechFlow,原创不易,求个关注 链接 Divide Two Integers 难度 Medium 描述 给定两个整数,被除数和除数,要求在不使用除号的情况下计算出两数的商 Given two integers dividend and divisor, divide two integers without using multiplication, divis...

TechFlow的博客 930

LeetCode47, 全排列进阶,如果有重复元素怎么办?

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第28篇,依然是全排列的问题。 如果对全排列不熟悉或者是最近关注的同学可以看一下上一篇文章: LeetCode46 回溯算法求全排列,这次是真全排列 LeetCode就是喜欢这样,把类似的问题放在一起,让你刷的时候一起刷,从而更加深刻地理解。今天的问题同样是全排列,不过稍稍不同的是,我们有一个限制条件不一样,给定的...

TechFlow的博客 904

数据科学面试的本质是端到端数据产品交付

数据科学面试已超越传统技术考核,演变为对‘业务翻译能力’与‘端到端交付闭环’的综合验证。其底层逻辑是将面试过程建模为微型咨询项目:从需求澄清、范围界定、方案设计到价值呈现,全程考察候选人如何在模糊信息中定义问题、基于约束做合理假设、并在时间压力下交付可验证结论。这一范式高度依赖AB测试归因、SQL工程思维、白板编码的过程外显化等核心能力,同时强调简历即PRD、案例即电梯提案、系统设计即业务链路映射等实战表达方法。它不筛选知识点复述者,而是识别能以数据产品思维驱动业务结果的Outlier型人才。

weixin_30915951的博客 324

LeetCode48, 如何让矩阵原地旋转90度

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第29篇,我们来看一道简单的矩阵旋转问题。 题意 题目的要求很简单,给定一个二维方形矩阵,要求返回矩阵旋转90度之后的结果。 下面我们来看两个例子: 题解 这个动图一看就明白了,也就是说我们需要将一个二维矩阵顺时针旋转90度。这个题意我们都很好理解,但是题目当中还有一个限制条件:我们不能额外申请其他的数组来...

TechFlow的博客 870

算法题 n-皇后 Python版

题目:https://www.acwing.com/problem/content/845/ 实现: n = int(input()) # 输入n col = [True]*n # 列 dg, udg = [True] * (2*n), [ True] * (2*n) # 正对角, 反对角 res = [['.']*n for _ in range(n)] def dfs(row): global n if row == n: for i in range(n):

blowfire123的博客 552

LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积?

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题53篇文章,我们一起来看看LeetCode中的85题,Maximal Rectangle(最大面积矩形)。 今天的这道题目和上一篇文章讲的Largest Rectangle in Histogram这题有一定的相似,所以如果没有看过上一篇文章的同学,建议先移步观看一下上一篇。 LeetCode 84 | 单调栈解决最大矩形问题 85题的官方难度是Hard,点赞2757,反对69,通过率37.2%左右。它的情况和84题非常

TechFlow的博客 844

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1266

在vscode中配置LeetCode插件,从此愉快地刷题

大家好,今早在B站看到up主的vscode里藏了leetcode插件,这才知道原来还有这款神器。但是没想到在用的时候遇到了一些麻烦,花了一点时间才解决。所以写这篇文章除了给大家安利这个好用的插件之外,也是为了帮助更多的同学避免踩坑。 简介vscode vscode在工业界鼎鼎大名,被誉为微软少有的拿得出手的精品(逃)。原本是不想过多赘述的,但是鉴于许多粉丝还是正在上学的萌新,所以花点笔墨简单介绍一...

TechFlow的博客 8240

FCKeditor 2.6.4 php版本任意文件上传——漏洞复现

一、漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多Web项目和大型网站均采用了FCKeditor。 Fckeditor 低于 2.6.4 php 版本任意文件上传漏洞,当您的PHP环境配置为 GPC = Off 时可绕过currentfolder参数过滤上传脚本木马控制网站服务器 二、漏洞原理 漏洞版本:<=2.6.4 三、环境搭建

W小哥 1万+

LeetCode50——一题学会快速幂算法

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode的第31篇文章,我们来看下LeetCode的第50题,求一个数的幂。 题意 这道题的题意只有一句话,就是给定两个数x和n,要求xnx^nxn。 从题意来看,这道题平平无奇,基本上没有什么特别的。但是我们继续看它的note就会发现问题,其中x是浮点数,它的范围是-100到100。而n的范围则是32位int的范围,到这...

TechFlow的博客 822

SpringBoot与Flowable整合:构建高效审批工作流的实战指南

本文是一份SpringBoot与Flowable整合构建高效审批工作流的实战指南。通过一个经典的二级审批场景,详细介绍了从项目搭建、BPMN流程设计、核心服务编写到RESTful API构建的完整步骤。文章深入探讨了如何利用Flowable工作流引擎实现审批流程的自动化驱动与灵活管理,并分享了变量管理、监听器、异步执行等进阶技巧与常见避坑指南,帮助开发者快速构建健壮、可维护的企业级审批系统。

qsc9012345的博客 519

128、点云配准与ICP:经典配准算法与深度学习配准

上周调试一台双臂协作机器人,左手持结构光相机扫描桌面上的随机堆叠工件,右手准备执行抓取。问题出在“对齐”这一步——相机扫描得到的点云和CAD模型点云之间差了大约15度的旋转,导致抓取姿态计算出来直接怼到桌面上。我第一反应是“ICP跑一下不就行了”,结果跑了三分钟,误差纹丝不动,甚至越迭代越发散。后来查了日志才发现,初始位姿给得太离谱,ICP直接掉进了局部最优。这个场景太典型了——很多人以为点云配准就是调个ICP库函数,实际工程里坑比想象中多得多。今天这篇笔记,咱们把点云配准这件事从头捋一遍。

sundong_81的博客 42
上一篇: LeetCode 90 | 经典递归问题,求出所有不重复的子集II
下一篇: Python | 浅谈并发锁与死锁问题
TechFlow
博客等级 码龄7年 347粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值