生成将n=3表示为正整数和的所有可能的唯一方法的Python程序:
def fun():
res=[]
a=[]
def backtracking(n):
if(n==0):
res.append(a)
print(res)
return
if(n<0):
return
for i in range(1,n+1):
a.append(i)
backtracking(n-i)
a.pop()
backtracking(3)
return res
print(fun()) 期待res = [[1,1,1][1,2][2,1][3]]而不是[ [] [] [] [] ]
发布于 2022-11-21 08:05:36
如果将列表a直接追加到res,则应该追加列表a的副本。列表是通过引用传递的,因此最终,您的res有4个对相同列表的引用,该列表为空。要获得列表的副本,您有不同的选项-- list.copy()、copy.copy()方法,或者只是切片list[:]。
def fun():
res=[]
a=[]
def backtracking(n):
if(n==0):
res.append(a.copy()) # updated
# print(res)
return
if(n<0):
return
for i in range(1,n+1):
a.append(i)
backtracking(n-i)
a.pop()
backtracking(3)
return res
print(fun())输出:
[[1, 1, 1], [1, 2], [2, 1], [3]]https://stackoverflow.com/questions/74515786
复制相似问题