class Solution:
def reverseString(self, s: List[str]) -> None:
if(len(s)<=1):
return
s[0],s[-1] = s[-1],s[0]
self.reverseString(s[1:-1])
这是有关LeetCode的问题。我们必须使用递归来反转列表,而无需使用额外的内存,即就地。
我编写了这段代码,但不确定为什么它不起作用。例如,当s = ['h', 'e', 'l', 'l', 'o']
时,输出为['o', 'e', 'l', 'l', 'h']
而不是['o', 'l', 'l', 'e', 'h']
-它仅交换列表的第一个和最后一个元素。
以下为我工作:
def reverse_inplace(char_list, step=1):
start, stop = step - 1, -step
if step == 1:
pass
elif len(char_list[start:stop]) <= 1:
return
char_list[start], char_list[stop] = char_list[stop], char_list[start]
reverse_inplace(char_list, step=step+1)
这将相同的列表引用传递给每个递归调用,并使用step
参数简单地跟踪您在过程中的距离。
[reverse_inplace(list("hello"))
输出:
['o', 'l', 'l', 'e', 'h']