class Solution:
def findSubsequences(self, nums: List[int]) -> List[List[int]]:
res = []
def backtrack(start, sub):
if len(sub) >= 2 and sub not in res:
res.append(sub[:])
# 此处如果return,只能得到长度为2的sub
# 实际的终止条件在 for 循环中隐含:当 start 达到 nums 的末尾时,循环自然结束
# 修改sub
for i in range(start, len(nums)):
if not sub or nums[i] >= sub[-1]:
sub.append(nums[i])
backtrack(i + 1, sub)
sub.pop()
backtrack(0, [])
return res
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
res = []
per = []
used = [False] * len(nums)
def backtrack(used):
if len(per) == len(nums):
res.append(per[:])
return
for i in range(len(nums)):
if used[i]== True:
continue
per.append(nums[i])
used[i] = True
backtrack(used)
used[i] = False
per.pop()
backtrack(used)
return res
# 考虑所有排列,没有先sort然后通过判断省略步骤
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
res = []
per = []
used = [False] * len(nums)
def backtrack(used):
if len(per) == len(nums) and per not in res:
res.append(per[:])
return
for i in range(len(nums)):
if used[i] == False :
per.append(nums[i])
used[i] = True
backtrack(used)
per.pop()
used[i] = False
backtrack(used)
return res