一条包含字母 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) 。

思路:动态规划边界条件 考虑为s[0]  或者 s.length()为0的情况为return 0  

推导式:若s[i] != 0那么一步就能到达,如果s[i] == 1 or s[i] =2 s[i-1] <= 6那么两步可以达到吗,大于26的都是一种方式到达

Java:

public class Solution {public int numDecodings(String s) {//动态规划标记int[] f = new int[s.length()];char[] c = s.toCharArray();//边界情况if(c.length == 0){return 0;}//第一个元素f[0] = c[0] > '0' ? 1:0;if(c.length == 1){return f[0];}//f[1]的值是关键,写不好,将会出现各种错误int k = c[0] > '0' && c[1] > '0'? 1:0;f[1] = k + (c[0] == '1' || c[0] == '2' && c[1] <= '6' ? 1:0);//从前往后遍历for(int i = 2; i < c.length; i++){if(c[i] > '0'){//第一个元素大于0,添加情况f[i] += f[i-1];}//在10-26之间则添加两个字母组成一个的情况if(c[i-1] == '1' || (c[i-1] == '2' && c[i] <= '6')){f[i] += f[i-2];}}return f[c.length-1];}
}

Python:

class Solution:def numDecodings(self, s):""":type s: str:rtype: int"""dp = [0] * (len(s)+1)#边界情况if len(s) == 0 or s[0] == '0':return 0dp[0] = 1dp[1] = 1for i in range(2,len(s) + 1):if s[i-1] > '0':  #若s[i-1]不为0,则s[i-1]可单独存在,s[i]可由s[i-1]走1步到达dp[i] = dp[i-1]if s[i-2] == '1' or (s[i-2] == '2' and s[i-1] <= '6') : #承接上面,若s[i-2]*10+s[i-1]<=26,则s[i]可由s[i-2]走2步到达dp[i] += dp[i-2]return dp[len(s)]

LeetCode 91. 解码方法 Java/Python相关推荐

  1. LeetCode 91.解码方法

    LeetCode 91.解码方法 ways: s[i] = 0 : if(s[i-1] == 1 || s[i-1] == 2) :s[i]只能和前一位绑定在一起,此时dp[i] = dp[i-2]; ...

  2. Java实现 LeetCode 91 解码方法

    91. 解码方法 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 - 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总 ...

  3. leetcode: 91. 解码方法

    91. 解码方法 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/decode-ways/ 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : ...

  4. LeetCode 91. 解码方法(动态规划)

    1. 题目 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数 ...

  5. 125. Leetcode 91. 解码方法 (动态规划- 字符串系列)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]表示的是到i这个位置的字符串的解码方法 步骤二.推断状态方程: dp[i]的推导会取决于当前s[i]的字符情况以及前一位字符,具体如下: 如果当前 ...

  6. Leetcode 91. 解码方法 (每日一题 20211013)

    一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> 1 'B' -> 2 ... 'Z' -> 26 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映 ...

  7. leetcode - 91. 解码方法

    一条包含字母 A-Z 的消息通过以下方式进行了编码: ′A′−>1'A' -> 1′A′−>1 ′B′−>2'B' -> 2′B′−>2 ......... ′Z′ ...

  8. leetcode 91 解码方法 动态规划 递推

    // 各种特殊情况处理 // 选择从右往左,从左往右也是一样class Solution { public:int numDecodings(string s) {int n = s.length() ...

  9. leetcode 91. 解码方法(dp)

    解题思路 记忆化搜索,记录已经计算过的子问题 代码 func numDecodings(s string) int {temp:=make([]int,len(s),len(s))for i := r ...

最新文章

  1. SQLSERVER model数据库
  2. protobuf在go中的应用
  3. 在VS2010中配制Elmah邮件发送到Gmail
  4. 爬虫:Charles证书设置为系统信任证书(root)
  5. 电大计算机网络网考,电大计算机网络(本)学习周期01任务A_0009答案
  6. c语言删除文件remove_Python中的文件和目录操作
  7. C++预处理指令#define,#if,#endif等
  8. 为何手机厂商如此热衷 5G?
  9. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案(转)
  10. 茗创:近红外数据处理业务
  11. xadsafe做暗刷_XADsafe去广告热心网友共享规则库部分开源(11月13更新)
  12. PyG搭建GCN实现链接预测
  13. 悟透JavaScript - 对象素描
  14. 重复性、分辨率的计算方法
  15. [转载]推荐...推荐...破解入门教程和解密工具
  16. Coremail2022Q4邮件安全报告:暴力破解骤降,盗号问题有所缓解?
  17. Task01:熟悉新闻推荐系统的基本流程(代码复现)
  18. 转行做程序员,你后悔了吗
  19. kaggle篇章二,新手入门泰坦尼克号的幸存者预测实验的超详细全过程记录
  20. 玻璃幕墙清洗机器人市场前景_玻璃幕墙越障清洁机器人

热门文章

  1. 揭密: M2和高房价究竟谁推高了谁?
  2. tp1200触摸屏开孔尺寸_GE触摸屏与西门子PLC通讯
  3. 亨通光电和量子计算机进展,$亨通光电(SH600487)$
  4. Python调用有道翻译API
  5. (ESC IIS笔记)类型“TextBox”的控件“TextBox1”必须放在具有 runat=server 的窗体标记内
  6. 315 433MHZ无线遥控接收解码源程序 Keil源程序 含AD格式电路图
  7. 表达式求值的三种方法
  8. C# 安捷伦 Agilent 34401A 通讯(含数据手册)
  9. 霍金走了,宇宙少了一个预言家
  10. 小区物业管理系统(含源文件)