本文共 1044 字,大约阅读时间需要 3 分钟。
class Solution(object): def findSubsequences(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ if not nums: return [] # 记录结果,需要去重 result = [] # 记录当前路径 path = [] n = len(nums) # 从nums的哪一位开始深度搜索 def trace(start): if len(path) >= 2: # 用切片产生的新对象指向当前path数据,并记录新对象 result.append(path[:]) # 如何去重:令每一层遍历不使用相同的数字 # 记录曾经添加到path中的数字 memo = set() for i in range(start, n): # 已经遍历过的数字 if nums[i] in memo: continue if not path: path.append(nums[i]) elif nums[i] >= path[-1]: path.append(nums[i]) else: continue memo.add(nums[i]) trace(i + 1) path.pop() trace(0) return result
时间复杂度:O(n*2n)。需要遍历每个元素,枚举所有子序列的时间代价是O(2n)
空间复杂度:O(n)。path和memo都需要O(n)的空间
转载地址:http://tylyz.baihongyu.com/