我的作法:
这道题目我用搜索,每次选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];
}
};
本文探讨了一种改进搜索算法以避免重复计算的方法,通过使用动态规划(DP)技术保存搜索结果,有效解决了TLE问题。详细介绍了如何将原始搜索过程转化为二叉树结构,并通过实例展示了节省计算资源的策略。

471

被折叠的 条评论
为什么被折叠?



