,Description
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.
Example
Given encoded message 12, it could be decoded as AB (1 2) or L (12).
The number of ways decoding 12 is 2.
我的思路:這個有點像爬樓梯。要麼’走一步’ 要麼’走兩步’. 即temp[i]=temp[i-1]+temp[i-2];
但是這個比爬樓梯多了一些限制條件。
1.s[i-1]不能爲0,如果s[i-1]是0的話,number[i]就只能等於number[i-2]
2.s[i-2,i-1]中的第一個字符不能是0,而且Integer.parseInt(s.substring(i-2,i))形成的數字不能大於26.
public int numDecodings(String s) {
if(s==null || s.length()==0) {
return 0;
}
if(s.charAt(0)=='0') {
return 0;
}
int [] temp = new int[s.length() + 1];
temp[0] = 1;
temp[1] = 1;
int tmp;
for(int i=2;i<=s.length();i++){
//檢查當前字符是不是'0'
if(Integer.parseInt(s.substring(i-1,i))!=0)
temp[i]=temp[i-1];
//檢查當前字符和前一個字符組合在一起是否在1-26之間
if(s.charAt(i-2)!='0'){
tmp = Integer.parseInt(s.substring(i-2,i));
if(tmp>0&&tmp<=26) {
temp[i] += temp[i-2];
}
}
}
return temp[s.length()];
}