[英]Reverse a string in-place using recursion
有一個關於遞歸的leetcode問題。 使用遞歸將字符串原地反轉。 不要分配額外的數組。
編寫一個反轉字符串的 function。 輸入字符串以字符數組 char[] 的形式給出。
不要為另一個數組分配額外的空間,您必須通過使用 O(1) 額外的 memory 就地修改輸入數組來做到這一點。
您可以假設所有字符都由可打印的 ASCII 字符組成。
我的解決方案不起作用,因為我的切片操作員正在創建列表的副本,而不是就位。 我似乎無法向 function 添加參數,因為測試工具不希望有額外的參數。
如何做到這一點,沒有額外的參數來檢測當前 position 索引到你試圖反轉的字符串中,或者沒有中間數據結構你 append 通過遞歸調用?
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])
我的 function 輸入 "hello" 返回["o","e","l","l","h"]
。 這是因為第一次調用 function 時,它對列表進行就地操作,后續調用是通過字符串的切片實現的。
謝謝大家。 解決方案是添加一個帶有默認值的參數,以解決 leetcode 測試工具的問題,所以現在我可以按如下方式進行:
class Solution:
def reverseString(self, s: List[str], start = 0) -> None:
"""
Do not return anything, modify s in-place instead.
"""
if len(s[start:len(s)-start]) <= 1:
return
end = len(s) - start - 1 # end postition
temp = s[start]
s[start] = s[end]
s[end] = temp
self.reverseString(s, start+1)
嘗試這個
chars=list('string')
for i in range((len(chars)-len(chars)%2)//2):
chars[i], chars[-i-1]=chars[-i-1], chars[i]
print(chars)
print(''.join(chars))
據我了解,解決方案應該是遞歸的。 嘗試這個:
編輯:(應該在 leetcode 中查看)
def reverseStringHelper(s, index):
length = len(s)
if index >= length / 2:
return
temp = s[index]
s[index] = s[length - 1 - index]
s[length - 1 - index] = temp
reverseString(s, index + 1)
def reverseString(s):
reverseStringHelper(s, 0)
定義arr = ['h', 'e', 'l', 'l','o']
並調用reverseString(arr, 0)
將導致['o', 'l', 'l', 'e', 'h']
您可以從不同的 function 調用它,因此它只會接受該列表。
這會過去的,因為它必須就地完成:
from typing import List
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
left, right = 0, len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left, right = left + 1, right - 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.