Total Accepted: 55371
Total Submissions: 330911
Difficulty: Medium
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.
Subscribe to see which companies asked this question
这个题目我其实觉得挺难得,虽然现实的是medium,一方面想到解决方法已经不容易了,还要考虑那么多情况,也许旁边坐着一个美女,心里有点小激动,让你给我思绪紊乱了。不得而知啊。
public class Solution {
public int numDecodings(String s) {
int [] result = new int [s.length()];
if(s.length()==0){
return 0;
}
if(s.charAt(0)!='0'){
result[0]=1;
}
else{
return 0;
}
if(s.length()==1){
return result[0];
}
if(s.charAt(0)=='1'){
if(s.charAt(1)=='0'){
result[1]=1;
}
else{
result[1]=2;
}
}
else{
if(s.charAt(0)=='2'){
if(s.charAt(1)>='1'&&s.charAt(1)<='6'){
result[1]=2;
}
else{
result[1]=1;
}
}
else{
if(s.charAt(1)>'0'){
result[1]=1;
}
}
}
if(s.length()==2){
return result[1];
}
for(int i=2;i<s.length();i++){
if(s.charAt(i)!='0'){
result[i]=result[i-1];
}
else{
if(s.charAt(i-1)=='1'||s.charAt(i-1)=='2'){
result[i]=result[i-2];
}
}
if(s.charAt(i-1)=='2'&&s.charAt(i)<='6'&&s.charAt(i)>'0'){
result[i]+=result[i-2];
}
if(s.charAt(i-1)=='1'&&s.charAt(i)>'0'){
result[i]+=result[i-2];
}
}
return result[s.length()-1];
}
}