我的作法:
这道题目我用搜索,每次选1个或者2个数字。然后TLE。
这样的作法其实是相当于二叉树,TLE是很大一部分做重复工作。
例如两种选择 1 2 和2 1 之后那一部分的计算是相同的,搜索计算了两次。、
后来看网上有DP作法,保存搜索结果
class Solution {
private:
vector<int> f;
public:
int getF(int index)
{
if (index < 0)
return 1;
else
return f[index];
}
int numDecodings(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (s.size() == 0)
return 0;
f.resize(s.size());
for(int i = 0; i < s.size(); i++)
{
f[i] = 0;
if (i >= 1)
{
string a(s, i - 1, 2);
if ("10" <= a && a <= "26")
f[i] += getF(i-2);
if ('1' <= s[i] && s[i] <= '9')
f[i] += getF(i-1);
}
else
{
if ('1' <= s[i] && s[i] <= '9')
f[i] = 1;
}
}
return f[f.size() - 1];
}
};