Leetcode 91. 解码方法 (每日一题 20211013)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode 91. 解码方法 (每日一题 20211013)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一條包含字母?A-Z 的消息通過以下映射進行了 編碼 :'A' -> 1
'B' -> 2
...
'Z' -> 26
要 解碼 已編碼的消息,所有數字必須基于上述映射的方法,反向映射回字母(可能有多種方法)。例如,"11106" 可以映射為:"AAJF" ,將消息分組為 (1 1 10 6)
"KJF" ,將消息分組為 (11 10 6)
注意,消息不能分組為? (1 11 06) ,因為 "06" 不能映射為 "F" ,這是由于 "6" 和 "06" 在映射中并不等價。給你一個只含數字的 非空 字符串 s ,請計算并返回 解碼 方法的 總數 。題目數據保證答案肯定是一個 32 位 的整數。示例 1:輸入:s = "12"
輸出:2
解釋:它可以解碼為 "AB"(1 2)或者 "L"(12)。
示例 2:輸入:s = "226"
輸出:3
解釋:它可以解碼為 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
示例 3:輸入:s = "0"
輸出:0
解釋:沒有字符映射到以 0 開頭的數字。
含有 0 的有效映射是 'J' -> "10" 和 'T'-> "20" 。
由于沒有字符,因此沒有有效的方法對此進行解碼,因為所有數字都需要映射。
示例 4:輸入:s = "06"
輸出:0
解釋:"06" 不能映射到 "F" ,因為字符串含有前導 0("6" 和 "06" 在映射中并不等價)。鏈接:https://leetcode-cn.com/problems/decode-waysclass Solution:def numDecodings(self, s: str) -> int:length = len(s)dp = [0] * (length + 1)dp[0] = 1s = ' ' + sfor i in range(1, length + 1):a = ord(s[i]) - ord('0')b = (ord(s[i-1]) - ord('0')) * 10 + (ord(s[i]) - ord('0'))if 1<= a <= 9:dp[i] = dp[i-1]if 10 <= b <= 26:dp[i] += dp[i-2]return dp[-1]
總結
以上是生活随笔為你收集整理的Leetcode 91. 解码方法 (每日一题 20211013)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode 面试题 01.01.
- 下一篇: Leetcode 739. 每日温度 (