题目:
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是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]。
给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/increasing-subsequences
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
答案:
时间:
20 min
class Solution:
def findSubsequences(self, nums: List[int]) -> List[List[int]]:
n=len(nums)
def dfs(i,record):
if i==n-1 and len(record)>=2:
self.ans.append(record[:])
return
if i>=n-1:return
if record[-1]!=nums[i+1]:
dfs(i+1,record[:])
if nums[i+1]>=record[-1]:
record.append(nums[i+1])
dfs(i+1,record[:])
record.pop()
return
self.ans=[]
for i in range(n):
dfs(i,[nums[i]][:])
return self.ans
要点:
1. 字符串哈希
python做起来很方便,或者用状态压缩,但是这里可以不用做字符串哈希
2. 注意相等的情况,只要往后做一次即可
所以有个if 不相等,也正是如此不需要做字符串哈希,直接回溯即可