iT邦幫忙

2024 iThome 鐵人賽

0
佛心分享-刷題不只是刷題

刷經典 LeetCode 題目系列 第 33

經典LeetCode 91. Decode Ways

  • 分享至 

  • xImage
  •  

題目:
你有一個僅包含數字的字串,要求將其轉換成字母。字母的編碼規則如下:

  • 'A' -> 1
  • 'B' -> 2
  • ...
  • 'Z' -> 26

請問這個字串有多少種不同的解碼方法?

範例:

輸入: s = "12"
輸出: 2
解釋: 它可以被解碼為 "AB"(1 2)或者 "L"(12)。
輸入: s = "226"
輸出: 3
解釋: 它可以被解碼為 "BZ"(2 26), "VF"(22 6), 或者 "BBF"(2 2 6)。

解題思路

每次可以選一個字母或兩個字母,然後可以從上一個狀態解法轉移過來,很像之前做過得 #70. Climbing Stairs 題目,

實作:

class Solution {
public:
    int numDecodings(string s) {
        if (s.empty() || s[0] == '0') return 0;
        int n = s.size();
        vector<int> dp(n + 1);
        dp[0] = 1;
        dp[1] = s[0] == '0' ? 0 : 1;
        for (int i = 2; i <= n; i++) {
            int oneDigit = stoi(s.substr(i-1, 1));
            if (oneDigit >= 1 && oneDigit <= 9) {
                dp[i] += dp[i-1];
            }

            int twoDigits = stoi(s.substr(i-2, 2));
            if (twoDigits >= 10 && twoDigits <= 26) {
                dp[i] += dp[i-2];
            }
        }
        return dp[n];
    }
};

參考:
#91. Decode Ways


上一篇
經典LeetCode 876. Middle of the Linked List
下一篇
經典LeetCode 213: House Robber II
系列文
刷經典 LeetCode 題目36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言