1. 程式人生 > 實用技巧 >419遞增子序列

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]))