Decode Ways 把字符串解码成数字组合@LeetCode

springboot+shardingsphere+druid 实现基于时间的水平分表 使用shardingsphere基于时间字段的动态水平分片。 阅读详情

做这道题还是有很多收获的:

1.为了避免麻烦,开数组时可以开大一些,如int[] ways = new int[len+10];

2. 这道题实际上是和计算要几步走完台阶的那道题本质是一样的。同样要用动态规划

3. 在拆分时,之前我一直在纠结如何处理0的为题,特别是对于输入是01,101,1001这样的数。后来才发现可以用10来判断,而不用对0去判断!

具体过程:

要求当前的index为i位置的decode ways,f[i+1]: 


每次对于当前的字符判断是否属于1-9(0肯定不行,因为0不在1-26中),如果属于,那么当前的字符可以被decode,并且和f[i]组合,f[i+1] += f[i]
然后对于当前字符和前一个字符组成的字符串判断是否属于10-26,如果属于,那么这两个字符可以被decode,并且和f[i-1]组合,f[i+1] += f[i-1]


我们维护的量res[i]是表示前i个数字有多少种解析的方式,接下来来想想递归式,有两种方式:第一种新加进来的数字不然就是自己比较表示一个字符,那么解析的方式有res[i-1]种,第二种就是新加进来的数字和前一个数字凑成一个字符,解析的方式有res[i-2]种(因为上一个字符和自己凑成了一个)。当然这里要判断前面说的两种情况能否凑成一个字符,也就是范围的判断,如果可以才有对应的解析方式,如果不行,那么就是0。


package Level3;


/**
 * Decode Ways
 * 
 * A message containing letters from A-Z is being encoded to numbers using the
 * following mapping:
 * 
 * 'A' -> 1 'B' -> 2 ... 'Z' -> 26 Given an encoded message containing digits,
 * determine the total number of ways to decode it.
 * 
 * For example, Given encoded message "12", it could be decoded as "AB" (1 2) or
 * "L" (12).
 * 
 * The number of ways decoding "12" is 2.
 * 
 */
public class S91 {

	public static void main(String[] args) {
		String s = "123";
		System.out.println(numDecodings(s));
	}

	public static int numDecodings(String s) {
		int len = s.length();
		if(len == 0){		// 长度为0
			return 0;
		}
		
		int[] ways = new int[len+10];		// 技巧:适当开大一些,这样可以免去一些特殊情况的麻烦!
		ways[0] = 1;			// 为了两位数时的情况:ways[2-2] = ways[0]
		ways[1] = s.charAt(0)!='0' ? 1 : 0;	// 在s,index为0的位置
		for(int i=1; i<len; i++){		// 从string的第二位(index=1)开始计算
			int parsed = Integer.parseInt(s.substring(i, i+1));
			if(parsed>=1 && parsed<=9){		// 就当前字符必须满足1-9
				ways[i+1] += ways[i];
			}
			parsed = Integer.parseInt(s.substring(i-1, i+1));
			if(parsed>=10 && parsed<=26){	// 对于当前字符和前一个字符组成的字符串判断是否属于10-26
				ways[i+1] += ways[i-1];
			}
		}
		return ways[len];
	}

}



华为OD机试双机位C卷-统计差异值大于相似值二元组个数(C/C++/Py/Java/Js/Go) 华为OD机试(机考)双机位C卷 【统计差异值大于相似值二元组个数】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 统计差异值大于相似值二元组个数 阅读详情

相关推荐

西门子1200之PID用法与控制

西门子PID加热试验

gyxgyx789的博客 6259

js: UrlDecode解码、UUID和GUID、阿拉伯数字转为中文数字

UrlDecode 是一个 JavaScript 函数,用于将经过 URL 编码的字符串转换为普通字符串。URL 编码是将特殊字符转换为它们的百分比编码表示形式的过程。这些特殊字符包括空格、斜线、井号(#)等。UrlDecode 函数将这些百分比编码转换回相应的特殊字符。UrlDecode 函数接受一个参数,即需要解码的字符串。它返回解码后的字符串。

头条:俊哥前端工程师,真正的大师永远怀揣着一颗学徒的心。 2157

解决 python2.7中 ImportError: No module named Crypto.Signature

我的解决办法,先查看有没有安装 pip,直接执行pip 回车 没有出现null什么的就安装了,如果没有安装去其他博客哪里看一下,正常情况是默认就有的,然后使用。发现我自己也不会啊,就百度看看,想着网上的解决方法一大片,但是都是废话,能用的没有几个,而且能安装的没有几个。这个里面的python2、3就是系统里面的python版本,直接跟我这样就可以了除非版本不一样,也就是没有这个版本。就可以使用了,第一个应该是卸载之前的,然后重新安装,我的就是这样解决的。就比如我的,我现在使用的 python2.7。

记录一下 1610

算法设计:如何将字符串编码为数字字符串

遍历字符串:逐个字符遍历整个字符串。获取ASCII值:将每个字符转换为其对应的ASCII值。拼接数字:将这些ASCII值拼接成一个长数字字符串。

十年运维开发经验的王义杰在此分享自己的知识和经验 1676

Android存储空间不足下,APP出现奔溃等情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 1. 问题起因     实时录制视频,使用getExternalCacheDir()函数返回的路径作为文件缓存区 2. 问题产生     系统在空间不足的情况下第一清除getExternalCacheDir和getCache文件下的缓存,导致正在录制的视频出现Error。 3. 解决方案     第一

OverseasAndroid的博客 4160

Argoverse2数据集保姆级导入教程:从下载到预处理全流程解析

本文详细解析了Argoverse2数据集的完整导入流程,从环境配置、数据下载到预处理和高效加载策略。作为自动驾驶领域的标杆数据集,Argoverse2提供多模态传感器数据和高精地图信息,帮助研究者快速搭建数据处理流水线。文章包含实用代码示例和性能优化技巧,特别适合自动驾驶算法开发者参考。

weixin_29035405的博客 338

leetCode394. 字符串解码(超详细分析) by JavaScript

例如,"abcd"可能会被编码为“1[a]1[b]1[c]1[d]”,也可能会被编码为’abcd’,同时,s也可能会被编码为嵌套的形式,例如’6[a2[bcd]]’。分析此问题,输入数据s是一个由数字字符、字母字符和方括号字符组成的字符串,题目保证输入数据有效,那么可以发现’[]’里面的内容一定对应’[’左边紧挨着的数字,由于输入的数据可以进行方括号的嵌套,所以使用栈来解决这个问题完美契合题目的特性。(a) 如果当前字符是数字字符,则向后查找进行数字字符的拼接,作为curNum,直到遇到’[’。

tangpinger的博客 2569

到底什么是指令集?什么是微架构?他们是什么关系?

指令集、处理器架构、芯片厂商、ARM、x86,其间关系还在迷糊吗?一文迅速理清!!

车载系统攻城狮 7813

Leetcode 字符串解码

每次遇到时,将当前的result保存到,并清空result确保每个括号对内的字符串能够独立解析。保证括号内的字符串能够正确重复并与之前的部分拼接。这一步处理使得代码可以正确解析嵌套和连续的编码字符串。用来增量式地拼接字符串,每次重复操作后都把结果追加到temp,这样可以避免频繁创建新对象,并且不会在循环中被清空。只是把中的累积结果转换成字符串后继续后续的处理。这种设计确保每层括号解析完后,拼接结果能够累积并正确组合,最终得到完整的解码字符串。

985小菜鸡 1652

15、虚拟环境中的数据保护与恢复方案解析

本文深入解析了虚拟环境中两种重要的数据保护与恢复解决方案:RecoverPoint for Virtual Machines(RP4VM)在VxRail上的设计,以及Veeam Backup & Replication(VBR)与VxRail的集成方案。文章详细介绍了RP4VM的网络布局、故障转移场景及其相关问题,以及VBR的架构设计、备份与复制流程、许可证选项及其多平台支持特性。此外,还探讨了RP4VM与VBR结合使用的综合解决方案,以及未来数据保护领域的发展趋势,如智能化管理、云原生集成和零信任架构,为

t4y5u6i7o的博客 96

提高RFID检测距离以及检测速度的方法总结

摘要:提高RFID检测距离需优化阅读器功率、标签灵敏度、天线设计及频段选择,同时减少环境干扰;提升检测速度则需改进防碰撞算法、增强并行处理能力、精简数据传输。实际应用需平衡两者关系,如物流仓储采用UHF频段、高增益天线和动态Q算法实现远距离高速读取,ETC系统则通过微波频段和高速调制实现超远距离快速识别。不同场景需针对性优化硬件配置和系统参数。

start_up_go的博客 293

Leetcode 394. 字符串解码

Leetcode 394. 字符串解码 题目 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 1

专注如一的博客 764

新手必看:C#调用YOLO模型完成图片/视频目标检测(上位机版)

新手学习C#调用YOLO模型,核心是先把基础流程跑通,再逐步优化。图片检测是基础,视频检测就是在图片的基础上加循环和线程,而上位机的实际项目,就是在这个基础上适配工业硬件和业务需求。本文的代码都是新手能直接复制运行的,如果你运行时遇到问题,先检查前期准备是否到位,再看避坑指南。记住,新手别追求一步到位,先实现功能,再慢慢优化性能和界面。等你能熟练调用YOLO模型后,再去研究模型训练、量化优化等进阶内容,会轻松很多。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 988

Leetcode394. 字符串解码——python

题目 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 示例: s = "3[a]2[bc]", 返回 "aaabcbc". s = "3[a2[c]]

weixin_41729258的博客 693

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode394 字符串解码

LeetCode394. 字符串解码

weixin_45771864的博客 568

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【算法入门】LeetCode 394:字符串解码 - 栈的应用(Java & JavaScript)|字符串解码问题:栈与递归的巧妙应用|解码括号内的重复模式

字符串解码问题是一个经典的字符串处理问题,通过使用栈来管理字符和重复次数,我们可以高效地解码字符串。希望本文能帮助你更好地理解这一问题及其解决方案,掌握栈的基本应用是解决许多类似问题的关键。本题可以使用栈来解决。栈是一种后进先出(LIFO)的数据结构,非常适合处理嵌套结构的问题。可以尝试解决类似的栈的应用问题,例如:LeetCode 20:有效的括号LeetCode 150:逆波兰表达式求值希望这篇博客能够帮助你理解字符串解码问题,并掌握解决 LeetCode 394 题的方法。祝你刷题愉快!

南北极之间 1648

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode 394.字符串解码

LeetCode394.字符串解码

qq_57596472的博客 439

【leetcode】字符串解码

leetcode-字符串解码

ningmengzhihe的博客 592

【LeetCode】把数字翻译成字符串&&最长不含重复字符的子字符串

25.把数字翻译成字符串 题目: 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 题解: 动态规划清晰图解 官方给出的转移方程的题解如下图 以12358为例,讨论转移方程 首先获得子串12,判断是否在10~25之间(为什么大于10?因为十位数可能为0),显然在该范围内,此时翻译有两种方式 数字2单独进行翻译,则数

qq_52641681的博客 6813

LeetCode【394】字符串解码

参考:https://blog.youkuaiyun.com/xushiyu1996818/article/details/107973300。

qq422243639的博客 210

剑指Offer46-把数字翻译成字符串

剑指Offer46-把数字翻译成字符串 题目 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi” 解法 class Solution { public int trans

viva_la__vida的博客 401

【栈】Leetcode 字符串解码

这道题有四种情况:1.遍历的时候遇到数字,我们计算并保存数字,将它加入到数字栈中;2.遍历的时候遇到[,我们就把字符保存,加入到字符栈中;3.当遇到],我们及时按照数字栈的栈顶元素的数字,添加字符栈中栈顶元素的次数;4.如果当前遍历的时候上述情况什么都不是,说明是正常的字符串,直接在字符栈的栈顶中添加即可

皮蛋的Bk 535

Leetcode394 字符串解码 递归和非递归

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。输入:s = “2[abc]3[cd]ef” 输出:“abcabccdcdcdef”输入:s = “abc3[cd]xyz” 输出:“abccdcdcdxyz”输入:s = “3[a2[c]]” 输出:“accaccacc”输入:s = “3[a]2[bc]” 输出:“aaabcbc”给定一个经过编码的字符串,返回它解码后的字符串。

qq_42747210的博客 637

[leetcode]字符串解码

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".s = "3[a2[c]]", 返回 "accaccacc".s = "3[a]2[bc]", 返回 "aaabcbc".

xiaocong1990的博客 402

Leetcode——把数字翻译成字符串

1. 题目 2. 题解 class Solution { public int translateNum(int num) { String s = String.valueOf(num); int[] dp = new int[s.length() + 1]; //s.substring(i - 2, i);需截取到最后一个字符,规避dp[i]越界问题 +1 dp[0] = 1; dp[1] = 1; i

Yawn 488

剑指 Offer 46.把数字翻译成字符串

剑指 Offer 46.把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 示例1: 输入: 12258 输出: 5 解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi” 限制: 0 <= num < 2312^{31}231

僵尸PiKaPi的博客 177
上一篇: Divide Two Integers 两数相除@LeetCode
下一篇: Construct Binary Tree from Preorder and Inorder Traversal 从先序和中序重建二叉树@LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值