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 = arr
tmp
arr
tmp = arr.copy()
添加回答
舉報
0/150
提交
取消