Пожалуйста, посмотрите на следующую проблему Leetcode: https://leetcode.com/problems/generate-parentheses/
В ней вы пытаетесь создать серию скобок с парой правил, как должен выглядеть каждый список скобок.
Мне известны два подхода, которые кажутся мне функционально идентичными, но работает только один. Я понимаю, что append возвращает None и изменяет на месте, но я не вижу, как это влияет на рекурсивный процесс.
Вот код, который не работает:
class Solution:
def generate(self, output, temp, n):
if len(temp) == 2*n:
output.append(temp)
left_count = temp.count("(")
right_count = temp.count(")")
if left_count < right_count:
return
if left_count < n:
self.generate(output, temp.append("("), n)
if left_count > right_count:
self.generate(output, temp.append(")"), n)
def generateParenthesis(self, n: int) -> List[str]:
output = []
self.generate(output, ["("], n)
return output
Этокод (с использованием concat) работает:
class Solution:
def generate(self, output, temp, n):
if len(temp) == 2*n:
output.append(temp)
left_count = temp.count("(")
right_count = temp.count(")")
if left_count < right_count:
return
if left_count < n:
self.generate(output, temp + "(", n)
if left_count > right_count:
self.generate(output, temp + ")", n)
def generateParenthesis(self, n: int) -> List[str]:
output = []
self.generate(output, "", n)
return output
Может кто-нибудь уточнить, что я здесь скучаю? Большое спасибо.