zoukankan      html  css  js  c++  java
  • LeetCode:Decode Ways

    题目链接

    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.

    实例:10应返回1, 01应返回0, 30应返回0。

    题目总感觉在涉及0的时候有分歧,通过这几个实例就能体会到。

    分析:需要注意的是,如果序列中有不能匹配的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 };
    复制代码

    http://www.cnblogs.com/TenosDoIt/p/3451920.html

  • 相关阅读:
    VS2003在解决方案范围内搜索卡死问题的解决
    文言古诗词
    中学名句
    Linux查看系统中socket状态
    为什么我希望用C而不是C++来实现ZeroMQ
    获取进程的IO计数
    Win7查看开关机记录
    VS的release工程设置为可调试
    VC开发中一些问题的解决
    shell脚本0——”一切皆文件“, 认识Shell
  • 原文地址:https://www.cnblogs.com/forcheryl/p/3991738.html
Copyright © 2011-2022 走看看