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;
    }
};
相关推荐
vibecoding日记15 小时前
双非如何快速入职字节等大厂大模型?真实案例分析:推理优化和投机解码
算法·求职·大模型工程师
yszaygr213818 小时前
Verilog参数化游程编码RLE模块
算法
望易18 小时前
刚设计的大模型架构-双域耦合认知框架
算法·架构
复杂网络1 天前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
HjhIron2 天前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩2 天前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹2 天前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术2 天前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望2 天前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法