91 解碼方法

2021-09-28 13:27:00 字數 1776 閱讀 3359

對於乙個字串我們有兩種選擇,選乙個 選兩個

注意 0 00 0x 這些坑

暴力遞迴

//0開頭的無法翻譯

//00,01

if (s.charat(start) == '0')

//選乙個

int res = dfs(s, start + 1);

//選兩個(保證能選,start不能到最後乙個字元那裡去了)

if (start < n - 1 && integer.parseint(s.substring(start, start + 2)) <= 26)

return res;}}

需要採用記憶化搜尋

//0開頭的無法翻譯

//00,01

if (s.charat(start) == '0')

if (dp[start] != -1)

//選乙個

int res = dfs(s, start + 1);

//選兩個(保證能選,start不能到最後乙個字元那裡去了)

if (start < n - 1 && integer.parseint(s.substring(start, start + 2)) <= 26)

dp[start] = res;

return res;

}//public static void main(string args)

}

class solution 

private int dfs(string s)

if (s.charat(0) == '0')

//字串長度

int len = s.length();

if (cache[len] != -1)

int res = dfs(s.substring(1));

if (s.length() >= 2 && integer.parseint(s.substring(0, 2)) <= 26)

return cache[len] = res;}}

//public static void main(string args)

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...