react-redux簡單使用
阿新 • • 發佈:2020-11-05
題意
一條包含字母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]; }