1. 程式人生 > >91. Decode Ways 解碼方法

91. Decode Ways 解碼方法

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"

 (1 2) or "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]; } }