1. 程式人生 > >leetcode由易入難——【4】Decode Ways

leetcode由易入難——【4】Decode Ways



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.

分析:該題與Climbing Stairs 類似,只是多了幾條判斷語句。

// LeetCode, Decode Ways
// 動態規劃,時間複雜度O(n),空間複雜度O(1)
class Solution {
public:
	int numDecodings(const string s) {
        if (s.empty() || s[0] == '0') return 0;
        int prev = 0;
        int cur = 1;
        // 長度為n的字串,有n+1個階梯
        for (size_t i = 1; i <= s.size(); ++i) {
            if (s[i-1] == '0') cur = 0;
            if (i < 2 || !(s[i - 2] == '1' || (s[i - 2] == '2' && s[i - 1] <= '6')))
	    //當i < 2 或者 i 超過 1~26 的範圍,將重置prev.
            prev = 0;
            int tmp = cur;
            cur = prev + cur;
            prev = tmp;
        }
        return cur;
    }
};