91 解碼方法

2021-09-27 06:43:15 字數 2596 閱讀 8833

一條包含字母a-z的訊息通過以下方式進行了編碼:

'a' -> 1

'b' -> 2

...'z' -> 26

給定乙個只包含數字的非空字串,請計算解碼方法的總數。

示例 1:

輸入:"12"輸出:2解釋:它可以解碼為 "ab"(1 2)或者 "l"(12)。
示例 2:

輸入:"226"輸出:3解釋:它可以解碼為 "bz" (2 26), "vf" (22 6), 或者 "bbf" (2 2 6) 。
遞規題解:

給定目標數字串,其可能的結果為去掉第乙個字元的解碼數與去掉前兩個字元的解碼數之和。

遞規加記憶化搜尋

memo[index]用來記憶 數字串s[index,,,n-1]對應的解碼數,函式_numdecodings(self,memo,index,s)的作用是計算memo[index]

class

solution

:def

numdecodings

(self,s)

: memo=[0

for _ in s]

return self._numdecodings(memo,

0,s)

def_numdecodings

(self,memo,index,s)

:if index==

len(s)

:return

1if memo[index]!=0

:return memo[index]

if s[index]

=='0'

:return0if

len(s)

>index+

1and

'0'<=

'26'

: memo[index]

=self._numdecodings(memo,index+

1,s)

+self._numdecodings(memo,index+

2,s)

else

: memo[index]

=self._numdecodings(memo,index+

1,s)

return memo[index]

;

動態規化方法

import numpy as np

class

solution

:def

numdecodings

(self,s)

:if s.startswith(

"0")

:return

0

memo=[0

for _ in

range

(len

(s)+1)

] memo[-1

]=1 memo[-2

]=1if s[-1

]!='0'else

0for index in

range

(len

(s)-2,

-1,-

1):if

'10'

<=s[index:index+2]

<=

'26'

: memo[index]

=memo[index+1]

+memo[index+2]

elif s[index]

!='0'

: memo[index]

=memo[index+1]

return memo[0]

;

91 解碼方法

方法一 動態規劃法 該問題可以通過動態規劃的方法進行求解,我們假設s i 代表一條長度為i的訊息,對應的解碼方法的總數為dp i 那麼這個值的大小和dp i 1 以及dp i 2 相關,因為解碼時只有一位或者兩位字元可以作為乙個原碼看待。當我們假設這條訊息的最後一位作為原碼時,它的取值範圍為 1 9...

91 解碼方法

一條包含字母a z的訊息通過以下方式進行了編碼 a 1 b 2 z 26給定乙個只包含數字的非空字串,請計算解碼方法的總數。示例 1 輸入 12 輸出 2 解釋 它可以解碼為 ab 1 2 或者 l 12 示例 2 輸入 226 輸出 3 解釋 它可以解碼為 bz 2 26 vf 22 6 或者 b...

91 解碼方法

對於乙個字串我們有兩種選擇,選乙個 選兩個 注意 0 00 0x 這些坑 暴力遞迴 0開頭的無法翻譯 00,01 if s.charat start 0 選乙個 int res dfs s,start 1 選兩個 保證能選,start不能到最後乙個字元那裡去了 if start n 1 intege...