【发布时间】:2020-08-17 15:06:47
【问题描述】:
有一个关于递归的leetcode问题。使用递归将字符串原地反转。不要分配额外的数组。
编写一个反转字符串的函数。输入字符串为 字符数组 char[].
不要为另一个数组分配额外的空间,你必须这样做 使用 O(1) 额外内存就地修改输入数组。
您可以假设所有字符都由可打印的 ASCII 组成 字符。
我的解决方案不起作用,因为我的切片操作员正在创建列表的副本,而不是就位。我似乎无法向函数添加参数,因为测试工具不需要额外的参数。
如果没有额外的参数来检测您尝试反转的字符串中的当前位置索引,或者没有通过递归调用附加到的中间数据结构,您如何做到这一点?
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
if len(s) <= 1:
return
temp = s[0]
s[0] = s[len(s)-1]
s[len(s)-1] = temp
return self.reverseString(s[1:len(s)-1])
输入“hello”的函数返回["o","e","l","l","h"]。这是因为第一次调用该函数时,它在原地操作列表,随后的调用是通过字符串的切片来实现的。
【问题讨论】:
-
为什么不给你想要的附加参数一个默认值?
-
我认为这不可能。那里有一堵墙。
-
你是对的,添加一个默认参数让我开始。谢谢@superbrain
-
但是请注意,递归堆栈占用 O(n) 额外空间,因此无论如何都不能满足要求。
-
@superbrain 他们只是在递归教程中将问题重新定义为递归问题。所以问题本身只有一个小提示图标说,尝试用递归解决。我知道如何用两个指针非递归地解决它。
标签: python