Exemplo n.º 1
0
    int numDecodings(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
	if( s.length() < 1)
		return 0;
	if(caches.find(s) != caches.end())
	{
		return caches[s];
	}
	if(s[0] == '0')
		return caches[s]= 0;

	if(s.length() > 1)
	{
		if( s[0] == '1' || ( s[0] == '2' && s[1] < '7'))
		{
			int sum1 =  numDecodings(s.substr(1));
			int sum2 = 1;
			if( s.length() > 2)
			{
				sum2 = numDecodings(s.substr(2));
			}
			return sum1 + sum2;
		}
		else
		{
			return caches[s] = numDecodings(s.substr(1));
		}
	}
	return caches[s] = 1;        
    }
Exemplo n.º 2
0
int main() {
    char s[] = "201";
    int ans = numDecodings(s);
    printf("%d\n", ans);
    system("pause");
    return 0;
}
Exemplo n.º 3
0
int main(void){
	char s[20];
	while(gets(s)){
		int result=numDecodings(s);
		printf("%d\n",result);
	}
	
}
Exemplo n.º 4
0
 int numDecodings(string& s, int i)
 {
     if(i == s.length())
         return 1;
     
     if(memory[i] != -1)
         return memory[i];
     
     if(s[i] == '0')
         return 0;
     
     if((s[i] == '1' && i+1 < s.length() && s[i+1] != '0') || (s[i] == '2' && i+1 < s.length() && s[i+1] >= '1' && s[i+1] <= '6'))
     {
         if(i+2 < s.length() && s[i+2] == '0')
         {
             int res = numDecodings(s, i+1);
             memory[i] = res;
             return res;
         }
         
         int res1, res2;
         
         res1 = numDecodings(s, i+1);
         
         if(res1)
             res2 = numDecodings(s, i+2);
         else
             res2 = 0;
         
         memory[i] = res1+res2;
         return memory[i];
     }
     
     if((s[i] == '1' && i+1 < s.length() && s[i+1] == '0') || (s[i] == '2' && i+1 < s.length() && s[i+1] == '0'))
     {
         int res = numDecodings(s, i+2);
         memory[i] = res;
         return res;
     }
     
     int res = numDecodings(s, i+1);
     memory[i] = res;
     return res;
 }
Exemplo n.º 5
0
    int numDecodings(string s) {
        if(s.length() == 0)
            return 0;

        memory = new int[s.length()];

        for(int i = 0; i < s.length(); i++)
            memory[i] = -1;

        return numDecodings(s, 0);
    }
Exemplo n.º 6
0
int numDecodings(char* s) {
    if(s==NULL) return 0;
    int len=strlen(s);
    if(len==0) return 0;
    for(int i=0;i<len;i++){//先检查是否有非法字符
        if(!(s[i]>='0'&&s[i]<='9')){
            return 0;
        }
    }
    if(len==1){
        if(s[0]=='0') return 0;
        else  return 1;
        
    }
    int result=0;
    //下面为大于等于2的情况。
    if(s[0]=='1'||(s[0]=='2'&&s[1]<='6')){
        result= numDecodings(s+1)+numDecodings(s+2);
    }
    else{
        result= numDecodings(s+1);
    }
    return result+1;
}