收割结果,没有return
构建set代替数组used
两个判断:
set有之前出现过的元素
数组不是递增
class Solution(object):
def __init__(self):
self.path=[]
self.res=[]
def findSubsequences(self, nums):
self.backtracing(nums,0)
return self.res
def backtracing(self,nums,startindex):
if len(self.path)>1:
self.res.append(self.path[:])
used=set()
for i in range(startindex,len(nums)):
if nums[i] in used:
continue
if len(self.path)>0 and nums[i]<self.path[-1]:
continue
self.path.append(nums[i])
used.add(nums[i])
self.backtracing(nums,i+1)
self.path.pop()
使用used,没有startindex
class Solution(object):
def __init__(self):
self.path=[]
self.res=[]
def permute(self, nums):
self.used=[0]*len(nums)
self.backtracing(nums)
return self.res
def backtracing(self,nums):
if len(self.path)==len(nums):
self.res.append(self.path[:])
return
for i in range(0,len(nums)):
if self.used[i]==1:
continue
self.path.append(nums[i])
self.used[i]=1
self.backtracing(nums)
self.used[i]=0
self.path.pop()
使用层剪枝
class Solution(object):
def __init__(self):
self.path=[]
self.res=[]
def permuteUnique(self, nums):
self.used=[0]*len(nums)
nums.sort()
self.backtracing(nums)
return self.res
def backtracing(self,nums):
if len(self.path)==len(nums):
self.res.append(self.path[:])
return
for i in range(0,len(nums)):
if self.used[i]==1:
continue
if i>0 and nums[i]==nums[i-1] and self.used[i-1]==0:
continue
self.path.append(nums[i])
self.used[i]=1
self.backtracing(nums)
self.used[i]=0
self.path.pop()