Leetcode 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.
Similar Questions: Decode Ways II
思路:由后向前遍历,p[i]表示的是s[i,...,s.length()-1]中可以解码的数量。设置辅助位p[s.length()]=1。对于当前位,
1.s[i]==0,那么p[i]=0;
2.s[i]!=0,如果s[i, i+1]组成的整数不大于26,那么p[i]=p[i+1]+p[i+2];
3.s[i]!=0,如果s[i, i+1]组成的整数大于26,那么p[i]=p[i+1];
代码:
1 public class Solution { 2 public int numDecodings(String s) { 3 if(s == null || s.length() == 0) return 0; 4 int len = s.length(), i = len - 1; 5 int[] p = new int[len + 1]; 6 p[len] = 1; 7 if(s.charAt(i) != '0') p[i] = 1; 8 for(i--; i >= 0; i--) { 9 if(s.charAt(i) == '0') p[i] = 0; 10 else p[i] = (Integer.parseInt(s.substring(i, i + 2)) <= 26) ? p[i + 2] + p[i + 1] : p[i + 1]; 11 } 12 return p[0]; 13 } 14 }