|
|
1
3
尝试使用动态编程方法:
(注意,如果p[x]为0,则返回0,因为这意味着一行中有两个0,而您的规则似乎不允许这样做。) 求和的第一部分是处理当前字符被解释为字母的情况;求和的第二部分是处理最近两个字符被解释为字母的情况。 实际上,p[x]等于字符串整体 从启动到位置X 可以解释为字母。由于您可以通过查看以前的结果来确定这一点,因此只需要循环一次字符串的内容—O(n)时间而不是O(2) n )这是一个巨大的进步。您的最终结果只是p[len(input)-1],因为“从开始到结束的所有内容”与“整个字符串”相同。 示例运行“111”的基本输入案例:
因为p[2]是我们最后的结果,它是3,所以我们的答案是3。 如果字符串是“1111”,我们将继续下一步:
答案确实是5个有效的解释:aaaa,kk,aka,aak,kaa。注意这5个潜在答案是如何根据“11”和“111”的潜在解释构建的: “11”:AA或K “111”:AAA或KA或AK ‘111’+A:AAA+A或KA+A或AK+A '11'+K:AA+K或K+K |
|
|
2
1
递归消除总是一项有趣的任务。在这里,我将重点确保正确填充缓存,然后使用它,如下所示…
|
|
|
3
0
可以编写一个非递归的算法,但我认为它不会更快。我不是Python专家,所以我只给你一个算法:
这个算法的好处是,您可以通过首先搜索和索引数组中的所有as和bs来优化搜索/替换。 因为您使用的是Python,不管您做什么,您都应该将字符串转换成一个数字列表。数字0-9是Python中的静态对象,这意味着它们可以自由分配。您还可以创建一个到z的可重用字符对象。列表的另一个好处是删除两个元素并插入单个元素的替换操作比反复复制字符串快得多。 |
|
|
4
0
通过不复制字符串,而是传递要研究的第一个字符的原始字符串和索引,可以大大减少内存占用:
然后递归调用为:
这样,您就保留了递归算法的简单性,并节省了大量内存。 |
|
|
MMedina · 将powershell应用于子文件夹 1 年前 |
|
|
YorSubs · Linux中遍历目录的时间不同方法[关闭] 1 年前 |
|
Romn · 在递归函数中键入元组或元组列表 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
Ack · 尝试迭代JSON数据以匹配用户输入 2 年前 |