在leetcode中尝试了python3回溯。对于下面的代码,附加答案(stack[:])工作,但附加答案(堆叠)不是。你知道吗
提前谢谢。你知道吗
Leetcode。你知道吗
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
nums = list(range(1,n+1))
ans = []
stack = []
def backtracking( current_pos = 0, current_in_tuple = 0, rest = n):
if current_in_tuple == k:
ans.append(stack)
return
if rest + current_in_tuple < k:
return
for i in range(current_pos, n-k+current_in_tuple+1):
stack.append(nums[i])
backtracking(i+1, current_in_tuple+1, rest-1)
stack.pop()
backtracking()
return ans
输入:4,2
Actual:[[],[],[],[],[],[]]
Expected:[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
不同之处在于
listA.append(listB)
将listB的浅拷贝添加到listA,这意味着如果listB随后发生更改(即通过调用listB.pop())
),那么更改也将发生在listA中。你知道吗但是
listA.append(listB[:])
是一个完全独立的副本,没有链接到原始的listB。你知道吗我会给你一些提示来调试它,
stack[:]
创建一个新的数组,而stack
引用的是同一个数组,你可以通过比较这两个数组的id
来检查它,查看指向内存中不同位置的点您可以在下面的示例中看到结果数组中实际发生了什么
请注意,在修改
b
之后a
会被修改,这就是代码输出错误的原因我希望你觉得它有用:)
相关问题 更多 >
编程相关推荐