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.
本题有点类似于求斐波那契数列。假设字符串的长度为n,当n为0,1或者2,需要自己定义好f1,f2。 当n大于2时,分几种情况。
初始化f(i)=0 当s[i]不为‘0’,则f(i)+=f(i-1)。当s[i-1]和s[i]能够成10~26的数字,则说明s[i-1]和s[i]能翻译成一个字母,故f(i)+=f(i-2).
public class Solution {
public int numDecodings(String s) {
if(s==null||s.length()==0) return 0;
int f1=1;
if(s.charAt(0)=='0') f1=0;
if(s.length()==1 ) return f1;
int f2=2;
int temp=Integer.parseInt(s.substring(0,2));
if(temp==10||temp==20) f2=1;
else if(temp>26&&temp%10!=0) f2=1;
else if(temp>26&&temp%10==0) f2=0;
else if(temp<10) f2=0;
if(s.length()==2) return f2;
int f3=0;
for(int i=2;i<s.length();i++){
f3=0;
if(s.charAt(i)!='0') f3+=f2;
temp=Integer.parseInt(s.substring(i-1,i+1));
if (9<temp&&temp<27) f3+=f1;
f1=f2;
f2=f3;
}
return f3;
}
}