原题
https://leetcode.cn/problems/decode-ways/description/
思路
动态规划
复杂度
时间:O(n)
空间:O(n)
Python代码
class Solution:
def numDecodings(self, s: str) -> int:
dp = [0] * len(s)
for i in range(len(s)):
if i == 0:
if '1' <= s[i] <= '9':
dp[i] = 1
else:
dp[i] = 0
else:
if '1' <= s[i] <= '9':
dp[i] += dp[i-1]
if '10' <= s[i-1:i+1] <= '26':
if i-2 >= 0:
dp[i] += dp[i-2]
else:
dp[i] += 1
return dp[-1]
Go代码
func numDecodings(s string) int {
dp := make([]int, len(s))
for i := 0; i < len(s); i++ {
if i == 0 {
if '1' <= s[i] && s[i] <= '9' {
dp[i] = 1
}
} else {
if '1' <= s[i] && s[i] <= '9' {
dp[i] += dp[i-1]
}
n, _ := strconv.Atoi(s[i-1 : i+1])
if 10 <= n && n <= 26 {
if i-2 >= 0 {
dp[i] += dp[i-2]
} else {
dp[i] += 1
}
}
}
}
return dp[len(dp)-1]
}
7698

被折叠的 条评论
为什么被折叠?



