递归,但是会超时,因为重复的结果。去重,剪枝,太麻烦。
使用集合,set( ), 数据结构。达到去重目的。
set操作:https://www.runoob.com/python3/python3-set.html
注意,一个元素的元组,必须要用(1,),要有逗号,不然就是int。
还有set的add操作和update操作的区别。如果是add((1,2)),那么是加入了一个tuple。如果是update,会把1,2独立的加入到set中。
题目:
491. 递增子序列
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。
示例:
输入: [4, 6, 7, 7]
输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]
说明:
给定数组的长度不会超过15。
数组中的整数范围是 [-100,100]。
给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。
code:
class Solution(object):
def findSubsequences(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
self.ret = set()
def dfs(nums, res):
if len(res)>=2:
self.ret.add(res)
if not nums:
return
if not res or nums[0] >= res[-1]:
dfs(nums[1:], res)
dfs(nums[1:], res + (nums[0],))
else:
dfs(nums[1:], res)
dfs(nums, ())
return list(self.ret)
好了。