每日算法 - 解码方法

常见的加密、解密 加密与解密 一.Base编码系列 1.Base16 Base16编码使用16个ASCII可打印字符(数字0-9和字母A-F)对任意字节数据进行编码。 注: Base16不可能用到填充符号“=”。 2.Base32 Base32编码是使用32个可打印字符(字母A-Z和数字2-7)对任意字节数据进行编码的方案,编码后的字符串不用区分大小写并排除了容易混淆的字符,可以方便地由人类使用并由计算机处理。 ... 阅读详情

目录

题目

解题思路

代码


题目

一条包含字母 A-Z 的消息通过以下方式进行了编码:

'A' -> 1
'B' -> 2
...
'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1:

输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
示例 2:

输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/decode-ways
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 


解题思路

动态规划,dp

 


代码

/**
 * 字母解码数字方法
 *
 */

public class NumberDecodingSolution {
    public static void main(String[] args) {
        String s = "1110";
        System.out.println(numberDecodings(s));
    }

    public static int numberDecodings(String s){
        int len = s.length();
        if (len == 0 || s.charAt(0) == '0') return 0;
        // res[i] 表示第i位结束的字符串有的解码方式总数
        int res[] = new int[len];
        res[0] = 1;

        // dp
        for (int i = 1; i < len; i++) {
            int current = Integer.valueOf(String.valueOf(s.charAt(i-1))) * 10 + Integer.valueOf(String.valueOf(s.charAt(i)));
            int currentLocation = Integer.valueOf(String.valueOf(s.charAt(i)));

            // 0
            if (currentLocation == 0){
                // 只能和前面的一起翻译
                if(i >= 2 && (current / 10 == 1  || current / 10 == 2 )){
                    // 能和前面的一起翻译
                    res[i] = res[i-2];
                }else if(i == 1 && (current / 10 == 1  || current / 10 == 2 )){
                    // 能和前面的一起翻译
                    res[i] = res[i-1];
                }else {
                    // 不能和前面一起翻译
                    res[i] = 0;
                }
            }else{
                // 不为0
                if (current <= 26 && current >= 11){
                    // 和前一位组成的数字属于[11,26],能单独翻译也能和前一位一起翻译,res = 单独翻译 + 一起翻译
                    int temp = i == 1?1:res[i-2];
                    res[i] = res[i-1] + temp;
                }else if(current <= 9 && current >= 1){
                    // 属于[1,9],只能单独翻译
                    res[i] = res[i-1];
                }else if(current >= 27){
                    // 属于[27,...],
                    res[i] = res[i-1];
                }
            }
        }
        return res[len-1];
    }
}

 

LeetCode Hot 100 Python (71~80) LeetCode Hot 100 第71~80题的Python实现 阅读详情

相关推荐

遗传算法编码方式的应用及其改进算法的研究

遗传算法编码方式的应用及其改进算法的研究

leetcode-91解码方法(动态规划|记忆化搜索)

一条包含字母 A-Z 的消息通过以下映射进行了 编码 : ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“111” 可以将 “1” 中的每个 “1” 映射为 “A” ,从而得到 “AAA” ,或者可以将 “11” 和 “1”(分别为 “K” 和 “A” )映射为 “KA” 。注意,“06” 不能映射为 “F” ,因为 “6” 和 “06” 不同。 给你一个只含数字的 非空 字符串

m0_46656833的博客 205

benders分解算法 逻辑思路整理(加星)

一般我们经常可以看到的是经典的benders,此处我也结合经典的benders梳理下思路。

sinat_41348401的博客 7986

动态规划:解码方式

    给定一个数字字符串,其中的数字是按以下编码方式的结果。求对给字符串进行解码时,有多少种解码方式。如对于编码“12”,可以解码成“AB”(“1”,“2”)或“L”(“12”)。    分析:把解码的结果分为两部分:最后一个数为个位数和最后一个数为十位数。如果以个位数结尾,解码下一个数字的时候,有可能可以有两种方式:下一个数字单独作为一个值,或者与前面的数字合并组成一个十位数(前提是 10&l...

Peanut 大本营 705

Lm317电压源芯片制作电流源

还在找电流源芯片么?如何使用电压源芯片快速搭建电流源。

Ekko的博客 1万+

Flow Matching03-01:微分方程【微分方程(描述变化规律的方程):包含未知函数和它的导数的方程】【公式解(精确)、数值解(逼近)】

好的,我将从数学角度详细解释Flow Matching,从高中生能理解的基础知识开始,逐步深入到高级概念。

u013250861的博客 219

CH1-语言模型和解码算法

本文是cs224n关于nlg系列课程第一课,主要介绍了NLG相关背景、相关的语言模型和几种比较常见的解码算法。 简单介绍了greedy search、beam search、sample几种解码算法。

听了个听儿 1143

Xilinx DDR3 MIG IP核设计--汇总导航

快速上手Xilinx DDR3 IP核----汇总篇

孤独的单刀 2万+

base64编码和解码算法

目录一、概述二、原理三、算法源码四、TK版源码 Base64编码是一种基于64个可打印字符来表示二进制数据的方法。目前Base64已经成为网络上常见的传输8位二进制字节代码的编码方式之一。   为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如:传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制。图片的二进制流的每个字节不可能全部是可见字符,这就导致图片的二进制流无法传送。最好的解决方式就是在不改变传统协议的情况下,做

指尖魔法师 4038

深入浅出:大型语言模型(LLM)的全面解读

在当今的数字化时代,人工智能技术已经成为各行各业的核心驱动力之一。而在人工智能的领域中,大型语言模型(LLM)作为一种引人瞩目的技术,正在以其强大的语言理解和生成能力引领着一场革命。本文旨在深入浅出地解读大型语言模型,探讨其背后的原理、技术突破、应用场景以及未来发展趋势。

fudaihb的博客 10万+

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(一)

引言:从本文开始,我们介绍下项目中设计的并行LVDS高速DAC接口设计,包括DAC与FPGA硬件接口设计、软件设计等。项目设计高速DAC采用了ADI公司的AD9129,该芯片最大更新速率5.7Gsps,该芯片在宽带通信应用、LTE、雷达信号产生、干扰机等领域有广泛应用。

FPGA_Designer 2535

解码方法(Java算法每日一题)

问:问 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为: “AAJF” ,将消息分组为 (1 1 10 6) “KJF” ,将消息分组为 (11 10 6) 注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6” 和 “06” 在映射中并不等价。 给你一

wanjialin的博客 292

PDBfixer:蛋白质结构修复工具

本文介绍蛋白质数据银行(PDB)文件常见问题及修复工具PDBFixer的使用方法。PDB文件常存在缺失原子、残基等问题,PDBFixer可通过GUI、命令行或Python API实现自动化修复。文章详细说明安装方法、命令行参数、Python脚本修复流程及非标准残基替换表,并与Modeller、ColabFold和Rosetta Remodel等其他修复工具进行对比分析,提供了各工具的特点、适用场景和典型计算时间比较,帮助用户根据具体需求选择合适的修复工具。

Protein Designer的博客 611

『LeetCode|每日一题』---->解码方法

一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> "1" 'B' -> "2" ... 'Z' -> "26",要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。 注意,消息不能分组为 (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6" 和 "06" 在映射中并不等价。 给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数 。 题目数据保证答案肯定是一个 32 位 的整数。...

weixin_51065489的博客 654

PyQt 随笔:信号与槽的两种使用方法:@pyqtSlot 和 connect

在 PyQt 中,信号与槽是实现事件驱动的一种重要机制。通过信号与槽的连接,可以实现对象之间的通信,例如在用户界面中响应按钮点击事件或者数据的变化等。PyQt 提供了两种主要的方法来创建信号与槽的连接:@pyqtSlot 装饰器和 connect 方法。本文将详细介绍这两种方法,并提供相应的源代码示例。在上面的示例中,我们定义了一个名为。

QasdCpp的博客 763

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

20. 有效的括号,394.字符串解码,739.每日温度,84. 柱状图中最大的矩形

Code。

weixin_59234335的博客 802

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C/C++每日一练(20230319) 反转链表II、解码方法、擅长编码的小k

1. 反转链表 II🌟🌟   2. 解码方法🌟🌟   3. 擅长编码的小k🌟🌟🌟

汉阳Hann's Home 2956

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

每日算法:动态规划(解码方法、不同二叉搜索树、三角形最短路径之和、买股票的最佳时机)第二天打卡

题目一:解码方法 一条包含字母A-Z的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。 示例2: 输入: "226" 输出: 3 解释: 它可以解码为...

Zystem 196

力扣hot100 | 栈 | 20. 有效的括号、155. 最小栈、394. 字符串解码、739. 每日温度、84. 柱状图中最大的矩形

给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([])”输出:true示例 5:输入:s = “([)]”输出:false。

m0_56231308的博客 885

LeetCode每日一题解析:算法思维与面试技巧

算法是计算机科学的核心基础,通过系统性的问题求解训练可以显著提升开发者的工程能力。从哈希表、二叉树到动态规划,常见数据结构与算法的掌握程度直接影响代码效率和质量。LeetCode平台上的每日一题系列,特别适合用于构建算法知识体系,其中动态规划和二分查找等高频考点,在大厂面试中出现概率超过70%。通过分析2026年1月5日至11日的题目集合,可以学习到如何将基础算法应用于字符串处理、图论等实际场景,这种模式化训练对求职准备和日常开发都有重要价值。

weixin_30325487的博客 341

#leetcode#

/ 调用getString方法,将临时链表中的字符拼接成原始子串(如 ["b","c"] -> "bc")* 例如:s="123[a]", ptr初始指向'1',调用后返回"123",且ptr移动到'['的位置。// 循环repTime次,将子串拼接成重复后的字符串(如 "bc" 重复2次 -> "bcbc")// 反转临时链表,恢复子串的正确顺序(比如弹出顺序是 "c","b",反转后是 "b","c")* 例如:链表 ["a","aa","bcbc"] -> "aaabcbc"

wnaan的博客 437

【算法】leetcode100 堆、栈

方法一:暴力解法,遍历每个元素,依次以该元素为中心,向左右两边遍历,找小于该元素的左右边界。方法一:直接插入排序的方法进行排序,但是每次插入是O(k)的复杂度,k是现有节点数。时间复杂度O(n),空间复杂度O(1)。方法二:两个堆排序,大根堆存放小于等于中位数的值,小根堆存放大于中位数的值。时间复杂度:每次插入O(logk),k是现有结点数。空间复杂度O(k)。时间复杂度:O(n),空间复杂度:O(n)。top操作:获取 stack栈顶。getMin操作:获取min栈顶。方法二:栈,左、右边界的下标数组。

2401_86272648的博客 1124

Leetcode—91. 解码方法【中等】

运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

Atticus的博客 641

leetcode hot100 栈

连续的升温时res[idx] = 1, 降温时连续的数字入栈, 直到某一温度>栈顶索引的温度, 栈顶出栈, 栈顶索引res 相应计算, while循环保持判断该温度与栈顶温度直至结束。与栈相关, 所以一直在想存入取出的问题, 如果要存取, 那么本体一定是与数字大小相关, 故而判断入栈条件可以是temps[cur]>temp[pre]如果为 ’ ] ’ , 将括号中的字符串重复数字栈顶遍, 之后作为获取括号前的字符串即字符栈顶的字符串, 拼接成为新的字符串。单调增栈–栈存储索引, 保证栈内递增。

weixin_74191696的博客 1089

hot100 | 十二、栈

注意:×。

LMEdward的博客 303

【leetcode100-069到073】【栈】五题合集

第二题的逻辑和第一题相同,只是评判条件和第一题相反,因为要找的是第一个小于当前元素的,找到它就找到了当前矩形的右边界,而栈内元素是递增的,左边界就是栈顶元素下面的元素(其实不一定,可能会有非严格递增的情况,也就是栈顶和它下面的元素一样大,但因为本题找的是最大值,这样做对结果不会有影响,所以就不单独拿出来讨论了)。对第一题来说,要找的是比自身大的,因此在遍历时,遇到小的先存起来,只有当前元素比栈顶下标元素大时,才开始弹出栈内下标,直到栈内没有比当前元素更大的数时停止,并把当前元素入栈。,判断字符串是否有效。

weixin_63059689的博客 1078
上一篇: Spring - AoP
下一篇: 每日算法 - 组合(数学公式 -------- c(n,k))
Longtermevolution
博客等级 码龄9年 113粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值