我在做这个练习:
编写一个反转字符串的函数。输入字符串作为字符
s的数组给出。
要做到这一点,必须修改输入数组中的O(1)额外内存.
我的解决方案不起作用:
def reverseString(s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
s = s[::-1]正确答案:
def reverseString(s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
s[::] = s[::-1]为什么我的解决方案行不通?
发布于 2022-04-01 09:43:58
表达式s::-1将创建一个新列表,其元素将反转。
然后,
s[:] = s[::-1]...causes将复制到原列表先前占用的地址空间中的新列表。
s = s[::-1]将对反向列表的引用分配给局部变量s。
顺便提一下,因为我不知道"O(1)额外内存“是什么意思,值得注意的是,在功能上正确的答案确实需要重复原始列表中使用的内存。
def reverseString(s):
i = 0
j = len(s) - 1
while i < j:
s[i], s[j] = s[j], s[i]
i += 1
j -= 1...does并不是因为它在原地交换元素
发布于 2022-04-01 09:35:01
你得做个就地修改。
S[::] =正在对s的实际内存字节进行修改,而s = s[::-1]则指向变量名s而不进行任何修改。
发布于 2022-04-01 09:39:59
重新分配函数中的列表将不会更改原始列表、s[:] =或s[::] =片分配,从而替换先前列表中的内容。
https://stackoverflow.com/questions/71704644
复制相似问题