leetCode DP 91 解碼方法

2021-10-01 21:51:14 字數 1060 閱讀 1924

一條包含字母 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) 。

分析:

給定乙個長度未定的字串,對應的數字可以組成多少種字母組合。 最大的字母是由數字26組成,因此乙個位置的字母組合數和前兩個數相關!可以遍歷列舉字串。

定義dp[i]表示第i-1個字元對應的數字組合數。dp[i]與dp[i-1]、dp[i-2]有關。 至於狀態轉移方程和不同位置對應的不同數字有關

if(s.charat(i-1) != '0')

if(s.charat(i-2) == '1' || s.charat(i-2)=='2' && s.charat(i-1)<='6')

code:

public static int numdecodings(string s) 

int len = s.length();

if(len == 1)

int dp = new int[len+1]; // dp[i] 表示第i個字元時能表示多少種字元表示方法

dp[0] = 1;dp[1] = 1;

for( int i = 2 ; i <= len ; i++ )

if(s.charat(i-2) == '1' || s.charat(i-2)=='2' && s.charat(i-1)<='6')

}for(int i = 0;i <= len;i++)

system.out.println();

return dp[len];

}

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 解碼方法

一條包含字母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 或者 bb...