python // генерируем перестановки // память - PullRequest
1 голос
/ 05 марта 2020

У меня есть вопрос относительно этого вопроса 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, выполняемая в фоновом режиме, чтобы новая память не выделялась на каждом уровне рекурсии? Я немного запутался здесь.

...