class Solution:
"""
@param nums: A list of Integers.
@return: A list of permutations.
"""
def permute(self, nums):
# write your code here
result = []
if nums is None:
return result
self.permution(nums, 0, result)
return result
def permution(self, array, k, result):
if k == len(array):
print array
result.append(array)
else:
for i in xrange(k, len(array)):
array[i], array[k] = array[k], array[i]
self.permution(array, k+1, result)
array[i], array[k] = array[k], array[i]
if __name__=="__main__":
print Solution().permute([1, 2, 3])
这是关于排列的代码。当我输出答案时,我发现了问题。
如果我使用print array
,则输出为
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
这是对的。但是当我使用result.append(array)
时,输出是
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
我不明白为什么不一样。
答案 0 :(得分:0)
这是一个简单的call_by_reference问题。您通过引用传递array
而不是每次递归中的值。由于array
是通过引用传递的,因此任何递归步骤中的更改都适用于result
中的所有子数组,因为每个子数组都是同一数组的引用。要获得正确的结果,请执行以下操作:
替换:
self.permution(array, k+1, result)
使用:
self.permution(array[:], k+1, result)
有关该主题的更多详细信息,请参阅passing arguments。