zoukankan      html  css  js  c++  java
  • 力扣算法题—091解码

    一条包含字母 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 #include "_000库函数.h"
     2 
     3 
     4 //使用动态规划思想
     5 
     6 class Solution {
     7 public:
     8     int numDecodings(string s) {
     9         if (s.empty() || s[0] == '0')return 0;
    10         vector<int> dp(s.size() + 1, 0);
    11         dp[0] = 1;
    12         for (int i = 1; i < dp.size(); ++i) {
    13             if (s[i - 1] != '0') dp[i] += dp[i - 1];//防止一位"0"出现
    14             if (i >= 2 && s.substr(i - 2, 2) <= "26" && s.substr(i - 2, 2) >= "10") {//防止出现“01”这种组合
    15                 dp[i] += dp[i - 2];
    16             }
    17         }
    18         return dp.back();
    19     }
    20 };
    21 
    22     //另一种解法
    23 class Solution {
    24 public:
    25     int numDecodings(string s) {
    26         if (s.empty() || s[0] == '0') return 0;
    27         int c1 = 1, c2 = 1;
    28         for (int i = 1; i < s.size(); ++i) {
    29             if (s[i] == '0') c1 = 0;
    30             if (s[i - 1] == '1' || (s[i - 1] == '2' && s[i] <= '6')) {
    31                 c1 = c1 + c2;
    32                 c2 = c1 - c2;
    33             }
    34             else {
    35                 c2 = c1;
    36             }
    37         }
    38         return c1;
    39     }
    40 };
  • 相关阅读:
    应用层协议及ip地址划分
    请求与响应编码及jsp基本原理
    springboot注解
    springboot 快速入门
    Http协议简单解析及web请求过程
    Tomcat原理详解及请求过程
    mysql数据库乱码的问题解决
    AOP的实现原理
    Springl利用Aspectj的扩展实现Aop
    JDK动态代理实现原理
  • 原文地址:https://www.cnblogs.com/zzw1024/p/10774434.html
Copyright © 2011-2022 走看看