對於乙個字串我們有兩種選擇,選乙個 選兩個
注意 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...