第八周:[leetCode] 91. Decode Ways

来源:互联网 发布:java开发酒店管理系统 编辑:程序博客网 时间:2024/06/09 02:27

A message containing letters from A-Z is being encoded to numbers using the following mapping:

‘A’ -> 1
‘B’ -> 2

‘Z’ -> 26

Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message “12”, it could be decoded as “AB” (1 2) or “L” (12).
The number of ways decoding “12” is 2.

解题思路:较简单的dp类题目,寻找状态转移方程是关键,代码中pre 和 cur分别为直至第i-2位和第i-1位数字串所能编译的信息个数。

    int numDecodings(string s) {        int n = s.length();        if(n == 0 || s[0] == '0')return 0;        int pre = 1, cur = 1,res = 1;        for(int i = 1; i < n; i++){            if(isValid(s[i]) && isValid(s[i-1], s[i])) res = pre + cur;            else if(!isValid(s[i]) && isValid(s[i-1],s[i])) res = pre;            else if(isValid(s[i]) && !isValid(s[i-1],s[i])) res = cur;            else return 0;            pre = cur;            cur = res;        }        return res;    }    bool isValid(char pre, char cur){        if(pre == '1' || (pre == '2' && cur < '7'))            return true;        else             return false;    }    bool isValid(char cur){        return cur != '0';    }
0 0