这道题用到了不太熟悉的方法,用了一个set()去来控制重复,而不是在if上限制条件。
class Solution:
def __init__(self):
self.result = []
self.temp = []
def findSubsequences(self, nums: List[int]) -> List[List[int]]:
def find(nums,index):
if len(self.temp) >= 2:
self.result.append(self.temp[:])
uset = set()
for i in range(index,len(nums)):
if self.temp and nums[i] < self.temp[-1] or nums[i] in uset:
continue
uset.add(nums[i])
self.temp.append(nums[i])
find(nums,i+1)
self.temp.pop()
find(nums,0)
return self.result
和之前驱虫的逻辑略有不同,只要存在用过的就continue
class Solution:
def __init__(self):
self.result = []
self.temp = []
self.used = []
def permute(self, nums: List[int]) -> List[List[int]]:
self.used = [0 for _ in range(len(nums))]
def per(nums,used):
if len(self.temp) == len(nums):
self.result.append(self.temp[:])
for i in range(0,len(nums)):
if self.used[i] == 1:
continue
self.temp.append(nums[i])
self.used[i] = 1
per(nums,self.used)
self.temp.pop()
self.used[i] = 0
per(nums,0)
return self.result
这道把之前学过的去重方法又拿出来了,相较于上面就是加上之前学过的去重方法
class Solution:
def __init__(self):
self.result = []
self.temp = []
self.used = []
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
self.used = [0 for _ in range(len(nums))]
nums.sort()
def per(nums,used):
if len(self.temp) == len(nums):
self.result.append(self.temp[:])
for i in range(0,len(nums)):
if i >0 and nums[i-1] == nums[i] and self.used[i-1] ==0:
continue
if self.used[i] == 0:
self.temp.append(nums[i])
self.used[i] = 1
per(nums,self.used)
self.temp.pop()
self.used[i] = 0
per(nums,0)
return self.result