Почему append () не добавляет измененный список. Добавляется исходная строка, но печатается поменялся список - PullRequest
0 голосов
/ 19 октября 2019

nums: список чьих перестановок мне нужно найти. Проблема Leetcode: 46. Мне нужно вернуть матрицу, содержащую все перестановки списка. Когда он достигает конца возврата, я печатаю числа и даже добавляю числа к матрице. Он печатает измененные числа, но добавляет оригинальные числа. Кто-нибудь может объяснить мне причину или как я нашел эту проблему?

Я пытался создать v как глобальную матрицу, но она не работает.

class Solution:
    def permutation(self, v, nums, l, r):
        if l == r-1:
            print(nums)
            v.append(nums)
        else:
            for i in range(l, r):
                nums[i], nums[l] = nums[l], nums[i]
                self.permutation(v, nums, l+1, r)
                nums[i], nums[l] = nums[l], nums[i]
            return v

    def permute(self, nums: List[int]) -> List[List[int]]:
        v = []
        return self.permutation(v, nums, 0, len(nums))
'''

Input:[1,2,3]
Printing:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
Output:
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]

Expected:
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

1 Ответ

0 голосов
/ 19 октября 2019

Вы добавляете одну и ту же ссылку из списка nums к v каждый раз. Вместо этого вам следует добавить копию списка nums.

Изменить:

v.append(nums)

на:

v.append(nums[:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...