博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode:Decode Ways
阅读量:4358 次
发布时间:2019-06-07

本文共 1478 字,大约阅读时间需要 4 分钟。

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.

分析:需要注意的是,如果序列中有不能匹配的0,那么解码方法是0,比如序列012 、100(第二个0可以和1组成10,第三个0不能匹配)。递归的解法很容易,但是大集合会超时。转换成动态规划的方法,假设dp[i]表示序列s[0...i-1]的解码数目,动态规划方程如下:                                                                                                                                                              

  • 初始条件:dp[0] = 1, dp[1] = (s[0] == '0') ? 0 : 1
  • dp[i] = ( s[i-1] == 0 ? 0 : dp[i-1] ) + ( s[i-2,i-1]可以表示字母 ? dp[i-2] : 0 ), 其中第一个分量是把s[0...i-1]末尾一个数字当做一个字母来考虑,第二个分量是把s[0...i-1]末尾两个数字当做一个字母来考虑

代码如下:

1 class Solution { 2 public: 3     int numDecodings(string s) { 4         // IMPORTANT: Please reset any member data you declared, as 5         // the same Solution instance will be reused for each test case. 6         //注意处理字符串中字符为0的情况 7         int len = s.size(); 8         if(len == 0)return 0; 9         int dp[len+1];//dp[i]表示s[0...i-1]的解码方法数目10         dp[0] = 1;11         if(s[0] != '0')dp[1] = 1;12         else dp[1] = 0;13         for(int i = 2; i <= len; i++)14         {15             if(s[i-1] != '0')16                 dp[i] = dp[i-1];17             else dp[i] = 0;18             if(s[i-2] == '1' || (s[i-2] == '2' && s[i-1] <= '6'))19                 dp[i] += dp[i-2];20         }21         return dp[len];22     }23 };

【版权声明】转载请注明出处:

转载于:https://www.cnblogs.com/TenosDoIt/p/3451920.html

你可能感兴趣的文章
Operator_countByValue
查看>>
Java 日期往后推迟n天
查看>>
Web应用漏洞评估工具Paros
查看>>
Git 和 Github 使用指南
查看>>
20180925-4 单元测试
查看>>
mysql的数据存储
查看>>
[转载] Activiti Tenant Id 字段释疑
查看>>
[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .
查看>>
SQL Server-聚焦移除Bookmark Lookup、RID Lookup、Key Lookup提高SQL查询性能
查看>>
最小权限的挑战
查看>>
jquery 视觉特效(水平滚动图片)
查看>>
SVG笔记
查看>>
linux下使用dd命令写入镜像文件到u盘
查看>>
物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息
查看>>
2018-2019-1 20165234 20165236 实验二 固件程序设计
查看>>
IDEA的GUI连接数据库写入SQL语句的问题总结
查看>>
Xpath在选择器中正确,在代码中返回的是空列表问题
查看>>
leecode第一百九十八题(打家劫舍)
查看>>
【BZOJ 1233】 [Usaco2009Open]干草堆tower (单调队列优化DP)
查看>>
07-3. 数素数 (20)
查看>>