46和47题都是全排列问题,唯一区别就是,47题有重复的元素,所以需要在最后将重复的组合删掉。
46题:
class Solution:
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res = [[n]+p for i,n in enumerate(nums) for p in
self.permute(nums[:i]+nums[i+1:])] or [[]]
return res
【注意】:这里的or [[]]
一定不能忘,否则当for p in []
时,无论加的[n]
是什么,结果都为[]
!!
47题:
class Solution:
def permuteUnique(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums.sort()
res=[]
self.dfs(nums,[],res)
return res
def dfs(self,nums,path,res):
if len(nums)==0:
res.append(path)
for i in range(len(nums)):
if i>0 and nums[i]==nums[i-1]: #这句避免了重复!
continue
self.dfs(nums[:i]+nums[i+1:],path+[nums[i]],res)