抄的官方题解
res.append(nums[:]) 这样是可以的,但是res.append(nums)这样不行。
原因是如果使用赋值操作将nums赋值给另一个变量,那么修改新变量的值会影响原始列表nums的值。例如,如果执行新列表变量new_nums = nums,那么在对new_nums进行修改后,nums的值也会被修改。但如果使用nums[:]进行切片操作赋值给新变量,则对新变量进行的任何修改都不会影响原始列表nums的值。
1 class Solution(object): 2 def permute(self, nums): 3 """ 4 :type nums: List[int] 5 :rtype: List[List[int]] 6 """ 7 def backTrack(n): 8 if n == length: 9 res.append(nums[:]) 10 i = n 11 while i < length: 12 nums[i], nums[n] = nums[n], nums[i] 13 backTrack(n+1) 14 nums[i], nums[n] = nums[n], nums[i] 15 i += 1 16 length = len(nums) 17 res = [] 18 backTrack(0) 19 return res 20