此代码应反转列表,但仅交换第一个和最后一个元素

问题描述 投票:0回答:1
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']-它仅交换列表的第一个和最后一个元素。

python python-3.x reverse
1个回答
0
投票

以下为我工作:

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']
© www.soinside.com 2019 - 2024. All rights reserved.