LeetCode 刷题【91. 解码方法】

91. 解码方法

自己做

解:滑动窗口

cpp 复制代码
class Solution {
public:
    int numDecodings(string s) {
        int f1 = 0;                 //f(n  - 2)
        int f2 = 0;                 //f(n  - 1)
        int f = 0;                  //f(n)
        //不构成编码
        if(s[0] == '0')
            return 0;

        //一位编码的情况
        if(s.size() == 1)
            return 1;

        //两位编码的情况
        if(s.size() >= 2){      
            if(s[0] == '1' && s[1] <= '9'               //能跳两格【共同编码s[0] 与 s[1]】
            || s[0] == '2' && s[1] <= '6')
                f1 = 1;
            
            if(s[1] > '0')                              //能一格一格跳到s[1]
                f2 = 1;

            f = f1 + f2;
            f1 = f2;
            f2 = f;
        }

        //从第三位编码开始
        for(int i = 2; i < (int)s.size(); i++){  
            //能取两位有效【从f(n - 2)跳到f(n) 或者 从f(n - 1)跳到f(n)】
            if((s[i - 1] == '1' && s[i] <= '9'
              || s[i - 1] == '2' && s[i] <= '6')                                //跳两格【从f(n - 2)跳到f(n)】
              && s[i] > '0')                                                    //跳一格【从f(n - 1)跳到f(n)】
                f = f1 + f2;
            
            //只能取一位【从f(n - 1)跳到f(n)】
            else if(s[i] > '0')
                f = f2;
            
            //只能取两位【从f(n - 2)跳到f(n)】
            else if(s[i - 1] == '1' && s[i] <= '9'
                 || s[i - 1] == '2' && s[i] <= '6')                           //跳两格【从f(n - 2)跳到f(n)】
                f = f1;              
            
            //都不能取,即构不成编码
            else                                                              
                return 0;

            f1 = f2;
            f2 = f;  
        }

        return f;
    }
};
相关推荐
看浪的路人20 分钟前
第6讲:Agent 安全体系——Prompt 注入防御、工具调用审计与输出合规
人工智能·算法
局部有解30 分钟前
LeetCode Hot100 438 找到字符串中所有字母异位词
c++·算法·leetcode
垆边人似月.39 分钟前
移动长度 k 子串使字符串变成回文
数据结构·算法
pride.li1 小时前
第12章 Python 教程-流程控制:循环结构
linux·服务器·python·算法
海绵宝宝转agent1 小时前
2026-10-16 4算法+1面经
算法
小poop2 小时前
基础排序算法详解——插入、选择与交换排序
算法·排序算法
青蓝智慧马老师2 小时前
想学数据分析但零基础,正确顺序不是先学 Python
大数据·人工智能·算法
jeo陽2 小时前
05-数组与冒泡排序:第一个数据结构与经典算法
c语言·数据结构·算法
鸽鸽程序猿2 小时前
【刷题册】hot21-25
算法
Keven_112 小时前
算法札记:记忆化搜索中面对多组数据的初始化
算法