class Solution { public: void jiance(string s,vector<int>& res,int& index) { int len=s.size(); if(len==0)//如果是末位,就填1 { res.push_back(1); index++; return; } jiance(s.substr(1,len-1),res,index); if(s[0]=='0')//如果当前位置是0,就填0 { res.push_back(0); index++; return; } if(index==1)//对于1个字母,只有一种 res.push_back(1); else if((s[0]-'0')*10+(s[1]-'0')<27)//对于0-27内的数字,有两种,即前两个位置的值相加 res.push_back(res[index-1]+res[index-2]); else//对于大于27的,只有一种方式 res.push_back(res[index-1]); index++; } int numDecodings(string s) { vector<int> res; int index=0; jiance(s,res,index); return res[index-1]; } };
分析:
难在分析上。