<p>这里有两个问题:第一个问题是你<code>ans.extend</code>而不是<code>ans.append</code>,一旦改变,我们得到了第二个问题,即结尾处的空列表,原因是append只在列表<code>ans</code>中添加一个对<code>cur_set</code>的引用,这个引用在递归过程中删除了所有元素,所以最后会有多个对结尾处为空的同一个列表的引用,要解决这个问题,您只需要在列表的当前内容中添加一个副本,例如<code>list(cur_set)</code>。你知道吗</p>
<p>也没有理由让这成为一门课</p>
<pre><code>def subsetHelper(cur_set, index, A, ans):
if index >= len(A):
print "appending ", cur_set
ans.append(list(cur_set)) # < - here was the problem
print "ans: ", ans
return
# don't include current number
subsetHelper(cur_set, index+1, A, ans)
# include current number
cur_set.append(A[index])
self.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>试验</p>
<pre><code>>>> subsets([1,2,3])
appending []
ans: [[]]
appending [3]
ans: [[], [3]]
appending [2]
ans: [[], [3], [2]]
appending [2, 3]
ans: [[], [3], [2], [2, 3]]
appending [1]
ans: [[], [3], [2], [2, 3], [1]]
appending [1, 3]
ans: [[], [3], [2], [2, 3], [1], [1, 3]]
appending [1, 2]
ans: [[], [3], [2], [2, 3], [1], [1, 3], [1, 2]]
appending [1, 2, 3]
ans: [[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
[[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
>>>
</code></pre>