## [91\. Decode Ways](https://leetcode.com/problems/decode-ways/) A message containing letters from `A-Z` can be **encoded** into numbers using the following mapping: 'A' -> "1" 'B' -> "2" ... 'Z' -> "26" To **decode** an encoded message, all the digits must be grouped then mapped back into letters using the reverse of the mapping above (there may be multiple ways). For example, `"11106"` can be mapped into: - `"AAJF"` with the grouping `(1 1 10 6)` - `"KJF"` with the grouping `(11 10 6)` Note that the grouping `(1 11 06)` is invalid because `"06"` cannot be mapped into `'F'` since `"6"` is different from `"06"`. Given a string `s` containing only digits, return _the **number** of ways to **decode** it_. The test cases are generated so that the answer fits in a **32-bit** integer. **Example 1:** **Input:** s = "12" **Output:** 2 **Explanation:** "12" could be decoded as "AB" (1 2) or "L" (12). **Example 2:** **Input:** s = "226" **Output:** 3 **Explanation:** "226" could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6). **Example 3:** **Input:** s = "06" **Output:** 0 **Explanation:** "06" cannot be mapped to "F" because of the leading zero ("6" is different from "06"). **Constraints:** - `1 <= s.length <= 100` - `s` contains only digits and may contain leading zero(s). 狀態轉移方程: ```cpp= dp[i] = dp[i - 1] if s[i - 1] != '0' + dp[i - 2] if 10 <= stoi(s.substr(i - 2, 2)) <= 26 ``` ```cpp= class Solution { public: int numDecodings(string s) { int n = s.size(); // dp 數列代表的是 s 的前 i 個位置可以被解碼的次數 vector<int> dp(n + 1); // 起始值為 1,第 0 位可以被解碼 dp[0] = 1; // 0 開頭的數字不能被解碼,所以要算 0 次 // 其他數字開頭的話,算 1 次 dp[1] = (s[0] == '0' ? 0 : 1); // 迭代從第 2 個位置開始 // 也就是 s = "12" 的話,會從下標的地方開始算 // ^ for(int i = 2; i < n + 1; i++) { // 考慮一個數字的情況,如果前一個位置不等於 0 // 延續上一個可以解碼的次數:dp[i] = dp[i - 1] if(s[i - 1] != '0') dp[i] = dp[i - 1]; // 考慮兩個數字的情況 int twoDigits = stoi(s.substr(i - 2, 2)); // 如果符合 10 ~ 26 之間,加上 dp[i - 2] 的結果 if(10 <= twoDigits && twoDigits <= 26) { dp[i] += dp[i - 2]; } } return dp[n]; } }; ``` :::success - 時間複雜度:$O(N)$ - 空間複雜度:$O(N)$ :::