簡體   English   中英

為什么我的就地反轉字符列表的解決方案不起作用?

[英]Why does my solution to reverse a list of characters in-place not work?

我正在做這個練習:

寫一個 function 來反轉一個字符串。 輸入字符串作為字符數組s給出。

您必須通過使用額外的 O(1) memory 就地修改輸入數組來執行此操作。

我的解決方案不起作用:

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]

為什么我的解決方案不起作用?

表達式s[::-1]將創建一個新列表,其元素被反轉。

然后,

s[:] = s[::-1]

...導致將新列表復制到原始列表先前占用的地址空間中,而...

s = s[::-1]

將對反轉列表的引用分配給局部變量s

順便說一句,因為我不知道“O(1) 額外內存”是什么意思,所以值得注意的是,功能上正確的答案確實需要復制原始列表使用的 memory 而......

def reverseString(s):
    i = 0
    j = len(s) - 1
    while i < j:
        s[i], s[j] = s[j], s[i]
        i += 1
        j -= 1

...不是因為它在原位交換元素

您必須進行就地修改。

S[::] =正在對s的實際 memory 字節進行修改,而s = s[::-1]指向變量名稱s並且不進行任何修改。

重新分配 function 里面的列表不會改變原來的列表, s[:] = or s[::] = slice-assigns,替換之前列表中的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM