,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()];
}