У меня есть вопрос относительно этого вопроса LeetCode: 46. Перестановки . Следующее решение Python очень эффективно с точки зрения времени выполнения и использования памяти:
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
def backtrack(arr, cur):
if not arr:
final.append(cur)
return
for i in range(len(arr)):
backtrack(arr[:i] + arr[i+1:], cur + [arr[i]])
final = list()
backtrack(nums, list())
return final
Однако в backtrack(arr[:i] + arr[i+1:], cur + [arr[i]])
Python, кажется, выделяет новую память путем нарезки и объединения на каждом уровне рекурсии. Лучшая практика C ++ отличается и меняет элементы в векторе через возврат, а не создает новый вектор. Есть ли какая-либо оптимизация Python, выполняемая в фоновом режиме, чтобы новая память не выделялась на каждом уровне рекурсии? Я немного запутался здесь.