419递增子序列

from typing import List
# 这道题的思路是将列表分成两部分,一部分是递增子序列列表。
# 另一部分是还没有进行判断的列表。
# 然后每次递归的进行判断就好了。
class Solution:
def findSubsequences(self, nums: List[int]) -> List[List[int]]:
# 定义一个列表。用来接收递增子序列列表。
self.nums_lists = []
# 列表中的每一个元素都可以当做递增子序列的头部。
for i in range(len(nums) - 1):
# 注意这里需要列表长度减去一。
self.dfs([nums[i]],nums[i + 1:])
# 可能会有很多重复的列表,进行去重。
self.nums_lists = list(set([tuple(i) for i in self.nums_lists]))
return self.nums_lists
# 递归函数。
def dfs(self,now_list,last_list):
# 首先判断递增子序列列表是否大于或者等于2
if len(now_list) >= 2:
self.nums_lists.append(now_list)
# 定义一个变量接收递增子序列最大的值,用来判断后边的值是否能够加入到这个序列中。
num = now_list[-1]
# 遍历列表后边的元素
for i in range(len(last_list)):
if last_list[i] >= num:
self.dfs(now_list + [last_list[i]],last_list[i + 1:])

A = Solution()
print(A.findSubsequences([4, 6, 7, 7]))
posted @ 2020-08-25 19:31  月为暮  阅读(177)  评论(0编辑  收藏  举报