我只是在在线评审系统中提交两种解决方案。
首先是:
class Solution:
# @param S, a list of integer
# @return a list of lists of integer
def __init__(self):
self.res = []
def _subsets(self, cur, rest):
if rest == []:
return
for i, v in enumerate(rest):
S = cur[:] + [rest[i]]
self.res.append(S)
self._subsets(S, rest[i+1:])
def subsets(self, S):
S.sort()
self._subsets([], S)
self.res.append([])
return self.res
第二个是:
class Solution:
# @param S, a list of integer
# @return a list of lists of integer
def __init__(self):
self.res = []
def _subsets(self, cur, rest):
if rest == []:
return
for i, v in enumerate(rest):
S = cur[:] + [v]
self.res.append(S)
self._subsets(S, rest[i+1:])
def subsets(self, S):
S.sort()
self._subsets([], S)
self.res.append([])
return self.res
只有一个区别。在函数_subsets
的第四行中,第一行是S = cur[:] + [rest[i]]
,第二行是S = cur[:] + [v]
。
我很确定[rest[i]]
比[v]
慢。我使用函数dis.dis
来检查它们的字节码。它导致了相同的结论。但是,为什么第一个版本比第二个版本快?我想念一下吗?