为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

心有法竹 2022-09-13 15:22:18
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()



查看完整回答
反对 回复 2022-09-13
  • 1 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号