题目:

  1. 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2
  2. 示例:
  3. 输入: [4, 6, 7, 7]
  4. 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]
  5. 说明:
  6. 给定数组的长度不会超过15
  7. 数组中的整数范围是 [-100,100]。
  8. 给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。
  9. 来源:力扣(LeetCode
  10. 链接:https://leetcode-cn.com/problems/increasing-subsequences
  11. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

答案:

时间:

20 min

  1. class Solution:
  2. def findSubsequences(self, nums: List[int]) -> List[List[int]]:
  3. n=len(nums)
  4. def dfs(i,record):
  5. if i==n-1 and len(record)>=2:
  6. self.ans.append(record[:])
  7. return
  8. if i>=n-1:return
  9. if record[-1]!=nums[i+1]:
  10. dfs(i+1,record[:])
  11. if nums[i+1]>=record[-1]:
  12. record.append(nums[i+1])
  13. dfs(i+1,record[:])
  14. record.pop()
  15. return
  16. self.ans=[]
  17. for i in range(n):
  18. dfs(i,[nums[i]][:])
  19. return self.ans

要点:

1. 字符串哈希

python做起来很方便,或者用状态压缩,但是这里可以不用做字符串哈希

2. 注意相等的情况,只要往后做一次即可

所以有个if 不相等,也正是如此不需要做字符串哈希,直接回溯即可

其他:

代码报错:无