zoukankan      html  css  js  c++  java
  • leetcode 91. Decode Ways

    题目

    A代表1 B代表2 C代表3 Z代表26
    给你一个字符串如"12" 可以由 "AB" 也可以由“L”构成,求方案数

    思路和代码

    dp[i] 代表 到i-1为止有效的方案数
    那么 dp[0] 必然=1, dp[1] 看 s[0] 是否为0
    推广: 对于位置i, 如果 s[i-1]可以由A-Z代表, 那么 dp[i] += dp[i-1];
    如果s[i-2] *10 + s[i-1] 可以由A-Z代表,那么dp[i] += dp[i-2];

    class Solution {
    public:
        
        int numDecodings(string s) {
            int len = s.size();
            if(len == 0) return 0;
            vector<int> dp(len+1, 0);
            // dp[i] means (i-1) is valid
            dp[0] = 1;
            dp[1] = s[0] == '0' ? 0 : 1;
            for(int i=2; i<=len; i++) {
                int first = s[i-1] - '0';
                int second = (s[i-2]-'0')*10 + s[i-1]-'0';
                if(first > 0)
                    dp[i] += dp[i-1];
                if(second >= 10 && second <= 26)
                    dp[i] += dp[i-2];
            }
            return dp[len];
        }
    };
    
  • 相关阅读:
    django学习笔记1
    排序多重排序
    06计算列
    填充日期序列
    行,列单元格
    读取excel文件
    监控文本
    天干地支纪年法
    Mysql基础
    JDBC基础
  • 原文地址:https://www.cnblogs.com/Draymonder/p/11053976.html
Copyright © 2011-2022 走看看