91. Decode Ways 解碼方法
阿新 • • 發佈:2018-12-09
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12"
, it could be decoded as "AB"
"L"
(12).
The number of ways decoding "12"
is 2.
這道題我們可以使用動態規劃完成,有點類似於爬梯子問題,但是需要注意的這裡狀態變化的條件比爬梯子問題更加複雜,首先我們建立一個比陣列長度大一的陣列來儲存狀態,隨後需要注意的是如果字串的第一位為0則我們狀態陣列的第二個元素為0,否則為1,也就是說如果字串以0開頭則這個0不會對應任何一個字母,在進行解碼的時候必須跳過這個數字,接下來迴圈到第位,如果前一位數字處於1到9之間,則dp[i] = dp[i-1],
class Solution {public int numDecodings(String s) { int length = s.length(); int[] dp = new int[length+1]; dp[0] = 1; dp[1] = s.charAt(0)!='0' ? 1:0; for(int i =2;i<=length;i++){ int first = Integer.valueOf(s.substring(i-1,i)); int second = Integer.valueOf(s.substring(i-2,i)); System.out.println(first); System.out.println(second);if(0<first&&first<=9) dp[i] = dp[i-1]; if(10<=second&&second<=26) dp[i] = dp[i]+dp[i-2]; } System.out.println(Arrays.toString(dp)); return dp[length]; } }