一个全排列的问题
def permute(nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
ans=[]
flag={}
l = len(nums)
for j in range(l):
flag[j]=False
def bt(tmp=[],flag=flag):
if len(tmp) == l:
print(tmp)
ans.append(tmp)
for i in range(l):
if flag[i] == False:
flag[i]=True
tmp.append(nums[i])
print(tmp)
bt(tmp,flag)
flag[i]=False
tmp.pop()
bt()
return ans
if __name__ == '__main__':
c=[1,2,3]
res=permute(c)
print(res)
现在返回值为[[], [], [], [], [], []]
感到不解,,现在发现问题在tmp这个变量上,但是不知道为什么,请大佬解答,,谢谢!
ans.append(tmp)
换成ans.append([i for i in tmp])
或者换成
ans.append(copy.copy(tmp))
解释:
你一直在对同一个 list 操作,如
还有,要避免 可变数据类型作为函数定义中的默认参数,比如你上面的:
最好不要这么写,虽然并不影响你的结果,参考:
http://www.pythontab.com/html...