leetcode - 91. Decode Ways

Description

A message containing letters from A-Z can be encoded into numbers using the following mapping:

‘A’ -> “1”
‘B’ -> “2”

‘Z’ -> “26”
To decode an encoded message, all the digits must be grouped then mapped back into letters using the reverse of the mapping above (there may be multiple ways). For example, “11106” can be mapped into:

"AAJF" with the grouping (1 1 10 6)
"KJF" with the grouping (11 10 6)
Note that the grouping (1 11 06) is invalid because "06" cannot be mapped into 'F' since "6" is different from "06".

Given a string s containing only digits, return the number of ways to decode it.

The test cases are generated so that the answer fits in a 32-bit integer.

Example 1:

Input: s = "12"
Output: 2
Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).

Example 2:

Input: s = "226"
Output: 3
Explanation: "226" could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).

Example 3:

Input: s = "06"
Output: 0
Explanation: "06" cannot be mapped to "F" because of the leading zero ("6" is different from "06").

Constraints:

1 <= s.length <= 100
s contains only digits and may contain leading zero(s).

Solution

Recursive + memorization

Be careful of leading 0s

DP

Transformation equation:
d p [ i ] = ( d p [ i − 2 ] if  s [ i − 1 : i + 1 ] is valid ) + ( d p [ i − 1 ] if  s [ i ] is valid ) dp[i] = (dp[i-2] \; \text{if } \;s[i-1:i+1] \text{ is valid}) + (dp[i-1] \; \text{if } \;s[i] \text{ is valid} ) dp[i]=(dp[i2]if s[i1:i+1] is valid)+(dp[i1]if s[i] is valid)

Time complexity: o ( n ) o(n) o(n)
Space complexity: o ( n ) o(n) o(n)

Code

Recursive + memorization

class Solution:def __init__(self,):self.memo = {'': 1}def numDecodings(self, s: str) -> int:if s in self.memo:return self.memo[s]if s[0] == '0':return 0if len(s) == 1:return 1if len(s) == 2 and s <= '26':return 2 if s not in ('10', '20') else 1res = self.numDecodings(s[1:]) + (self.numDecodings(s[2:]) if s[:2] <= '26' else 0)self.memo[s] = resreturn self.memo[s]

Dynamic programming

class Solution:def numDecodings(self, s: str) -> int:def is_valid(s: str) -> bool:if len(s) == 1:return s[0] != '0'if len(s) == 2:return s[0] != '0' and s <= '26'dp = [0] * len(s)dp[0] = 1 if is_valid(s[0]) else 0if len(s) >= 2:dp[1] = (1 if is_valid(s[:2]) else 0) + (dp[0] if is_valid(s[1]) else 0)for i in range(2, len(s)):dp[i] = (dp[i - 2] if is_valid(s[i-1: i+1]) else 0) + (dp[i - 1] if is_valid(s[i]) else 0)return dp[-1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绝地求生7月5日服务器维护,绝地求生7月5日更新到几点 吃鸡更新维护公告

绝地求生将会在7月5日的早上10点进行一次新版本的更新&#xff0c;这次没什么重要的更新内容&#xff0c;预计是3个小时&#xff0c;估计会提早&#xff0c;大家可以做好准备&#xff0c;下面就来为大家分享一下绝地求生的更新维护公告。【正式服维护公告】我们将在北京时间 7 …

刀剑无双服务器显示404,刀剑无双如何开启GM命令 刀剑无双GM指令修改

关于刀剑无双GM命令和命令的使用方法,本站有文章讲过了,想了解的同学,可以用关建词"刀剑无双"搜索本站,现在来讲讲怎么开启支持GM命令.支持GM命令有二个版本,一个是开启所有用户的GM命令,也就是所谓的指令服了.另一个就是可以指定GM账号的高级JAR版本.指定GM账号和修…

小程序中ajax返回数据,微信小程序调用接口返回数据或提交数据

/*习惯用ajax了&#xff0c;则把(wx.request)封装一下&#xff0c; 调用方式1、先引入&#xff1a;const http require(../../js/http.js)2、使用方式&#xff1a;http.post或者http.get3、params参数格式如&#xff1a;{ start: 1, count: 4}*//*官方文档https://mp.weixin.q…

恋舞服务器维修,2144《梦幻恋舞》关闭充值及关服公告

尊敬的2144梦幻恋舞玩家&#xff1a;你们好&#xff01;2144《梦幻恋舞》将于2019年7月21日18:00正式终止游戏运营&#xff0c;关闭所有2144《梦幻恋舞》服务器以及充值入口&#xff0c;游戏关服后玩家将无法继续登录游戏。具体时间安排如下&#xff1a;1、即日起至关服期间&am…

ginapi服务器性能,如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (一)

gin-gonic介绍Go 语言最近十分火热&#xff0c;但对于新手来说&#xff0c;想立马上手全新的语法和各种各样的框架还是有点难度的。即使是基础学习也很有挺有挑战性。在这篇文章中&#xff0c;我想用最少的代码写出一个可用的 API 服务。这个 API 可以提供增删改查(CRUD)这些基…

svn 无线服务器,远程svn服务器

远程svn服务器 内容精选换一换远程桌面链接Windows云服务器报错&#xff1a;连接被拒绝&#xff0c;因为没有授权此用户账户进行远程登录。Windows远程桌面相关权限配置异常。在运行窗口输入secpol.msc&#xff0c;打开组策略编辑器打开"本地策略 > 用户权限分配 > …

人类跌落梦境显示无法连接服务器,人类跌落梦境手游进不去闪退怎么办 人类跌落梦境无法进入解决方法...

人类跌落梦境进不去怎么办?不少玩家都出现了游戏无法进入的情况&#xff0c;下面小编就为大家带来人类跌落梦境无法进入解决方法&#xff0c;一起来看看吧。人类跌落梦境手游进不去闪退怎么办 人类跌落梦境无法进入解决方法方法一&#xff1a;核对开服时间1、人类跌落梦境于12…

电脑开机显示服务器启动失败是什么原因,请问我的电脑在启动时显示NTDETECT失败是什么意思? 爱问知识人...

症状启动运行 Windows 的计算机时&#xff0c;启动过程可能失败&#xff0c;并且您可能收到以下错误信息&#xff1a;NTDetect Failed回到顶端原因如果 文件丢失或损坏&#xff0c;就会出现此问题。回到顶端解决方案Windows NT 4。0要解决 Windows NT 4。0 中的这一问题&#x…

jlabel字怎么变化_疫情在家烦躁不如学习怎样练好字吧

第一部分 练字的基本概念首先要明白&#xff0c;练字一定是主动的&#xff0c;而不能是盲目被动的&#xff0c;要了解所做的每一步的意义所在&#xff0c;才可能有效果&#xff0c;并为下一步打下基础。因此&#xff0c;在练字之前&#xff0c;必须首先搞清楚以下几个概念&…

科大奥锐实验报告霍尔效应_中科大929半导体物理专业课高分学长考研经验

推送会和你一起进步哒&#xff0c;记得右上角把我设为星标哦~考研经验3 August 2020中科大上岸学长考研途中最重要的是选择本人参加了2020中科大929半导体物理考研&#xff0c;分数137。关于半导体物理的历年考研信息(招生人数&#xff0c;大纲&#xff0c;分数线&#xff0c;教…

Win10系统java环境配置

下载JDK&#xff1a; 登录JDK官网&#xff1a;https://www.oracle.com/java/technol点击JDK Download向下翻找到适合自己电脑的版本&#xff0c;这里用win10举例&#xff0c;建议选exe文件&#xff0c;方便。 安装&#xff0c;一直点下一步即可&#xff0c;但是请记住jdk地址&…

app canvas渲染后图片黑色_H5 基于 canvas 实现电子签名并生成PDF文档

(给前端大全加星标&#xff0c;提升前端技能)转自&#xff1a;coyota666https://juejin.cn/post/6901273585428463624前言电子签名通俗来说就是通过技术手段实现在电子文档上加载电子形式的签名&#xff0c;其作用类似于纸质合同上的手写签名或加盖的公章。虽然电子签名多年来合…

浏览器播放视频时蓝牙耳机自动关机

原因是谷歌浏览器新增的音量调节界面插件的问题&#xff0c;解决方法&#xff1a;进网址设置 chrome://flags/#hardware-media-key-handling 里面Hardware Media Key Handling 改成disabled&#xff0c;然后点击右下角浏览器重启就OK了。不仅是chrome有效&#xff0c;新版的Mic…

前端为什么说github很重要_私域流量|为什么说私域流量很重要?

前面几篇文章我们分析了私域流量的概念&#xff0c;现在我们来分析一下私域流量的好处。为什么说私域流量很重要呢&#xff1f;首先&#xff0c;私域流量可以把营销成本降低&#xff0c;较快地获取用户反馈。之前在公域流量上进行的交易&#xff0c;都是你买我卖&#xff0c;你…

java中几种基本数据类型之间的转换

int类型转字符串 int a 10 ; String str a"";int a 10; String str Integer.toString(a);int a 10; String str String.valueOf(a); 字符串转int类型 String str "10"; int a Integer.parseInt(str);String str "10"; int a Intege…

idea的jsp如何显示语法高亮_如何啃下Python学习中的三块硬骨头?

Python 根式字【51CTO.com快译】众所周知&#xff0c;作为一门开源的高级编程语言&#xff0c;Python的用途十分广泛。它可以被用于不同的应用场景中&#xff0c;包括&#xff1a;开发基于桌面和Web的应用程序&#xff0c;分析访问数据&#xff0c;开发后端网站和人工智能等。虽…

java中数组的定义

int[] a new int[10];int[] a new int[]{元素1&#xff0c;元素2};int[] a {元素1&#xff0c;元素2};

几种经典排序算法

文章转载自&#xff1a;指月小筑 原文链接&#xff1a;链接

centos7盘符 linux_linux_centos7_扩展磁盘空间

那些经过PV创建啊 &#xff0c;vg 扩展啊 还有lv扩展的 都略过了。就说说我遇到的错误吧。先说说系统环境侬 这就是系统环境咯Linux oracle.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux然后是自己报错咯[rootoracl…

关于BigInteger的加减乘除使用

public static void main(String[] args) {BigInteger bg1 new BigInteger("12345678912");// int类型转BigIntegerint value 12345678912;BigInteger bg2 BigInteger.valueOf(value);//1.加法System.out.println(bg1.add(bg2));//2.减法System.out.println(bg1.s…