class Solution(object):
def findSubsequences(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res = []
n = len(nums)
def dfs(nums,begin,cur,n):
if len(cur)>1:
res.append(cur[:])
visit = [0] *201
for i in range(begin,n):
if (cur and nums[i]<cur[-1]) or visit[nums[i]+100]==1:
continue
cur.append(nums[i])
visit[nums[i]+100] = 1
dfs(nums,i+1,cur,n)
cur.pop()
dfs(nums,0,[],n)
return res
这题要求是子序列,还是不同的子序列,所以下次遍历从上次结束的地方+1开始,同时要在每一层去重,所以每层创建一个哈希数组。
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res = []
n = len(nums)
visit = [0] * n
def dfs(nums,n,cur,visit,level):
if level == n:
res.append(cur[:])
for i in range(n):
if visit[i] == 0:
visit[i] = 1
cur.append(nums[i])
dfs(nums,n,cur,visit,level+1)
visit[i] = 0
cur.pop()
dfs(nums,n,[],visit,0)
return res
我dfs的启蒙问题,排列就不能从begin开始了,不然前面的元素照顾不到了
class Solution(object):
def permuteUnique(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res = []
n = len(nums)
visit = [0] * n
def dfs(nums,n,cur,visit,level):
if level == n:
res.append(cur[:])
return
l = [0] * 21
for i in range(n):
if visit[i] == 0 and l[nums[i]+10]==0:
visit[i] = 1
cur.append(nums[i])
l[nums[i]+10]=1
dfs(nums,n,cur,visit,level+1)
visit[i] = 0
cur.pop()
dfs(nums,n,[],visit,0)
return res
这题也要在每一层去重