Разница между передачей параметров строки и массива в рекурсивную функциюPython

Программы на Python
Anonymous
Разница между передачей параметров строки и массива в рекурсивную функцию

Сообщение Anonymous »

Может быть, это глупый вопрос, поэтому прошу прощения, но существует проблема Leetcode, когда вам приходится возвращать все пути от корневого узла к листовым узлам в массиве строк, связанных с помощью «->» (пример ответа : ["1->2->5", "1->3"]). Оба решения в блоках кода ниже работают. Мне главным образом любопытно, почему для строкового решения я могу просто вернуться после добавления пути, а затем следующий вызов рекурсии не повлияет, но для решения массива я не могу вернуться, так как мне нужно удалить текущий элемент, иначе это повлияет следующий вызов рекурсии.
Это потому, что массивы изменяемы, поэтому сам массив изменяется, а строки - нет, и создается копия для передачи?
Это решение создания строки.
class Solution:
def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
res = []

def dfs(node, currPath):
if not node:
return

currPath += str(node.val)
if not node.right and not node.left:
res.append(currPath)
return

dfs(node.left, currPath + "->")
dfs(node.right, currPath + "->")

dfs(root, "")
return res

И это решение: создать массив, а затем объединить его для создания строки.
class Solution:
def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
res = []

def dfs(node, currPath):
if not node:
return

currPath.append(str(node.val))
if not node.right and not node.left:
res.append("->".join(currPath))

dfs(node.left, currPath)
dfs(node.right, currPath)
currPath.pop()

dfs(root, [])
return res


Подробнее здесь: https://stackoverflow.com/questions/790 ... e-function

Вернуться в «Python»