回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图实现一个Python解决方案来解决编程问题
寻找整数数组中的所有子集。我应该返回一个数组
它包含整数数组的所有子集,并且没有重复项
已排序。你知道吗</p>
<pre><code>def subsetHelper(cur_set, index, A, ans):
if index >= len(A):
print "appending ", cur_set
ans.append(cur_set)
print "ans: ", ans
return
# don't include current number
subsetHelper(cur_set, index+1, A, ans)
# include current number
cur_set.append(A[index])
subsetHelper(cur_set, index+1, A, ans)
cur_set.pop()
def subsets(A):
A.sort()
ans = []
cur_set = []
# dont include current number
subsetHelper(cur_set, 0, A, ans)
return ans
</code></pre>
<P>在C++中实现这一逻辑会得到正确的返回值。然而,当我在Python中这样做的时候,我得到的只是最后一个空列表的集合,而在迭代过程中,它将相同的当前列表复制到列表中的所有项,即使打印输出每次都显示它附加了正确的子集。为什么会这样?以下是输出:</p>
<pre><code>print subsets([1,2,3])
appending []
ans: [[]]
appending [3]
ans: [[3], [3]]
appending [2]
ans: [[2], [2], [2]]
appending [2, 3]
ans: [[2, 3], [2, 3], [2, 3], [2, 3]]
appending [1]
ans: [[1], [1], [1], [1], [1]]
appending [1, 3]
ans: [[1, 3], [1, 3], [1, 3], [1, 3], [1, 3], [1, 3]]
appending [1, 2]
ans: [[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]]
appending [1, 2, 3]
ans: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[], [], [], [], [], [], [], []]
</code></pre>