如何解决Leetcode Pronlem 46在递归函数中传递参数
我正在练习Leetcode问题46,并使用递归方法查找数组的所有排列(例如[1,2,3]
)。有关详细信息,请参考视频Here。
代码如下:
class Solution:
def permute(self,nums):
answer=[]
def recur(num,answer,s=[]):
temp_s=[]
for k in s:
temp_s.append(k) #perform deep copy
if not num:
answer.append(temp_s)
else:
for i in range(len(num)):
other=[]
for j in num:
other.append(j)
s.append(num[i])
other.pop(i)
recur(other,s)
s.pop()
recur(nums,s=[])
return answer
我的问题是为什么我需要在前几行中对s
进行深度复制,因为当我未实现深度复制时,结果为空:
class Solution:
def permute(self,s=[]):
if not num:
answer.append(s)
else:
for i in range(len(num)):
other=[]
for j in num:
other.append(j)
s.append(num[i])
other.pop(i)
recur(other,s=[])
return answer
[[],[],[]]
解决方法
目标是“找到数组的所有排列”。
每个排列只能存储为数组的修改副本,否则结果只能是其中之一,而不是全部。
解决方案的递归性质阻止了迭代方法,即修改数组,输出数组然后再次修改。
因此,如果您从不复制初始数组,就不可能实现目标。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。