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]]
您每次都将nums
列表的相同引用附加到v
。您应该改为附加nums
列表的副本。
更改:
v.append(nums)
至:
v.append(nums[:])