Using
list.append
modifies the list in place - its result isNone
. Using + creates a new list.
看看下面两段代码:
demo1
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res = []
self.dfs(nums, [], res)
return res
def dfs(self, nums, path, res):
if not nums:
res.append(path)
for i in xrange(len(nums)):
self.dfs(nums[:i]+nums[i+1:], path+[nums[i]], res)
demo2
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if not nums:
return []
res = []
self.helper(nums, res, [])
return res
def helper(self, nums, res, item):
if len(item) == len(nums):
res.append(item[:])
return
for num in nums:
if num not in item:
item.append(num)
self.helper(nums, res, item)
item.pop()
这两个代码里面path+[nums[i]]时就不用path[:]而用path,另一段程序则相反。
试着将demo2中的item[:]改成item的话,会惊奇的发现res是[ [], [], []........]这样的空列表。这是因为,item不会创建新对象,item着个name还是refer到了原来的对象,而那个对象最后都会pop成空列表。