在多个递归调用期间捕获所有递归调用的输出

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变量中吗?


心有法竹
浏览 150回答 1
1回答

慕码人8056858

这是因为在每个递归级别,您都在修改相同的列表。当您同时执行这两项操作并引用同一列表对象时。相反,您需要通过 复制列表以捕获当前状态(并且不受递归中所做的更改的影响)。tmp = arrtmparrtmp = arr.copy()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python