您当前的位置: 首页 >  面试

惊鸿一博

暂无认证

  • 1浏览

    0关注

    535博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

算法笔记_面试题_9.解码方法/数字字符串解码成字母的种类

惊鸿一博 发布时间:2020-06-29 19:34:57 ,浏览量:1

问题

91. 解码方法

难度:中等

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

解法1

时间复杂度:遍历一遍字符串,所以是O(n)。

空间复杂度:用了一个数组,所以是O(n),

int numDecodings(string s) 
{
  if (s[0]=='0') return 0;
  
  vector dp(s.size()+1);
  dp[0]=1; dp[1]=1;               //dp[i]表示i位长度的子字符串,能解码的种类数。
  
  for(int i=1; i< s.size(); ++i)  //注意:因为要看当前位的前一位,所以从i=1开始
  {
    if (s[i]=='0')
    {
      if (s[i-1]=='1' || s[i-1]=='2') dp[i+1]=dp[i-1];  //  ..20..
      else return 0;                                    //  ..30..
    }
    else
    {
      if (s[i-1]=='1' || (s[i-1]=='2' && s[i]            
关注
打赏
1663399408
查看更多评论
0.0391s