您的位置:首页 > 其它

91. Decode Ways

2016-03-29 21:25 295 查看
//Time Limit Exceeded
class Solution {
public:
int get_num(string &s,int i,int num)
{
if(num==0) return 1;
if(s[i]=='0') return 0;
int a=0,b=0;
a=get_num(s,i+1,num-1);
if(num>=2&&s[i]<'3'&&(s[i]-'0')*10+s[i+1]-'0'<=26) b=get_num(s,i+2,num-2);
return a+b;
}
int numDecodings(string s) {
return get_num(s,0,s.size());
}
};


//4ms ac
//这就是思路的转换吧,开始用搜索,结果时间超了,确实能够得到解,但是不符合要求。
//换一种思维,实际上并不用搜索那么复杂,把数列的特征进行分类记录就好了
//后来发现其实是一个斐波那契数列
class Solution {
public:
int get_num(int *d,int i,int num)
{
if(i>num) return 1;
if(d[i]==0) return get_num(d,i+1,num);
int sum=1,a=1,b=1;
while(d[i++]==1)
{
b=sum;
sum+=a;
a=b;
}
return sum*get_num(d,i,num);
}
int numDecodings(string s) {
if(s.size()==0) return 0;
if(s[0]=='0') return 0;
if(s.size()==1) return 1;
int *d=new int[s.size()];
memset(d,0,sizeof(int)*s.size());
for(int i=1;i<s.size();i++)
{
if(s[i]=='0'&&(s[i-1]=='0'||s[i-1]>'2')) return 0;
if(s[i]=='0')
{
d[i]=0;
d[i-1]=0;
}
else if(s[i-1]=='1'||(s[i-1]=='2'&&s[i]<'7')) d[i]=1;
}
return get_num(d,1,s.size()-1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: