leetcode 91:解码方法

使用动态规划的方式,但是难点是要考虑很多情况,比如0 00 001均为0

1010,202 均为1  0存在1且有能得到解码结果的情况是0的前面只能是1 2,比如506 907结果均为0

当有两个0相邻时结果为0 比如 1001 100111结果均为0

还有很多情况需要考虑,不断的完善吧

int numDecodings(std::string s) {
    if(s.find_first_not_of('0')!=0)
        return 0;
    std::vector<int> d;
    d.push_back(1);
    d.push_back(1);
    if(s[0]=='0')
        s=s.substr(1);
    std::string ss="";
    for(int i=2;i<s.size()+1;i++){
        ss="";
        ss+=s[i-1-1];
        ss+=s[i-1];
        if(s[i-1]=='0') {
            if(s[i-2]>'2')
                return 0;
            else if(s[i-2]=='0')
                return 0;
            if(i>=3) {
                if(s[i-2]>'0'&&s[i-2]<='2'&&s[i-3]>'0'&&s[i-3]<='2')
                    d.push_back(d[i-2]);
                else
                    d.push_back(d[i-1]);
            }
            else if (ss <= "26") {
                d.push_back(d[i - 1]);
            }

        }
        else {
            if (s[i - 2] == '0') {
                d.push_back(d[i - 1]);
            } else {
                if (ss <= "26") {
                    d.push_back(d[i - 1] + d[i - 2]);
                } else
                {
                    d.push_back(d[i - 1]);
                }
            }
        }
    }

    return d[s.size()];
}

猜你喜欢

转载自blog.csdn.net/u013263891/article/details/85019526