1. 程式人生 > 實用技巧 >react-redux簡單使用

react-redux簡單使用

題意

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

'A' -> 1
'B' -> 2
...
'Z' -> 26
給定一個只包含數字的非空字串,請計算解碼方法的總數。

題目資料保證答案肯定是一個 32 位的整數。

提示

  • 1 <= s.length <= 100
  • s只包含數字,並且可以包含前導零。

解答

以位置i處開始的字串解碼方法總數,取決於以位置i+1和i+2處開始字串解碼方法總數,假設為dp[i]、dp[i + 1]、dp[i + 2]

  ①i與i+1處的字串構成的整數大於26,dp[i] = dp[i + 1]

  ②i與i+1處的字串構成的整數小於等於26,dp[i] =dp[i + 1] +dp[i + 2]

類似於有條件的走樓梯,且注意含0的處理,最終返回dp[0]

程式碼如下

    public int numDecodings(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        int[] dp = new int[s.length() + 1];
        dp[s.length()] = 1;
        char ch = s.charAt(s.length() - 1);
        if (ch == '0') {
            dp[s.length() 
- 1] = 0; } else { dp[s.length() - 1] = 1; } for (int i = s.length() -2; i >= 0; --i) { ch = s.charAt(i); if (ch == '0') { dp[i] = 0; } else { int value = (s.charAt(i) - '0') * 10 + (s.charAt(i + 1) - '0');
if (value > 26) { dp[i] = dp[i + 1]; } else { dp[i] = dp[i + 1] + dp[i + 2]; } } } return dp[0]; }