class Solution: # @param A : list of integers # @return a list of list of integers def check(self,arr,l,i): for j in range(l,i): if arr[j]==arr[i]: return 0 return 1 def calc(self,arr,l,r,temp): if l>=r: #return arr self.result.append(temp) print(temp) #print(arr) for i in range(l,r): if self.check(arr,l,i): arr[l],arr[i]=arr[i],arr[l] temp=arr self.calc(arr,l+1,r,temp) arr[l],arr[i]=arr[i],arr[l] def permute(self, A): self.result=[] temp=[] self.calc(A,0,len(A),temp) print(self.result)输入: [ 1, 2, 3 ]输出:[1, 2, 3][1, 3, 2][2, 1, 3][2, 3, 1][3, 2, 1][3, 1, 2][[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]上面的代码是基于这个问题从 极客forgeeks(https://www.geeksforgeeks.org/distinct-permutations-string-set-2/) .我试图为特定的语义存储所有可能的不同排列,如1,2,3。我无法在 self.result 中捕获递归调用的输出([1,2,3] 当我尝试这样做时重复)变量,但我能够正确打印它。有人可以帮助如何将其存储在self.result变量中吗?
1 回答
慕码人8056858
TA贡献1803条经验 获得超6个赞
这是因为在每个递归级别,您都在修改相同的列表。当您同时执行这两项操作并引用同一列表对象时。相反,您需要通过 复制列表以捕获当前状态(并且不受递归中所做的更改的影响)。tmp = arrtmparrtmp = arr.copy()
添加回答
举报
0/150
提交
取消
