为什么不将append()附加到交换列表。它附加原始字符串,但打印交换列表

问题描述 投票:0回答:1

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]]
python-3.x string permutation
1个回答
0
投票

您每次都将nums列表的相同引用附加到v。您应该改为附加nums列表的副本。

更改:

v.append(nums)

至:

v.append(nums[:])
© www.soinside.com 2019 - 2024. All rights reserved.