【组合回溯】【树枝+树层去重】Leetcode 491. 非递减子序列
- 解法1
---------------🎈🎈题目链接🎈🎈-------------------
解法1
【树层去重】:如果在同层元素重复(这里无法排序,所以无法使用之前的flag,采用hashset) continue跳过
【树枝去重】:树枝必须按照从小到大,如果本层的某个元素小于上一层父节点大小 continue跳过
class Solution {List<List<Integer>> result = new ArrayList<>();List<Integer> temp = new ArrayList<>();public List<List<Integer>> findSubsequences(int[] nums) {if(nums.length<2) return result;helper(nums,0,Integer.MIN_VALUE);return result;}public void helper(int[] nums, int start, int upnum){HashSet<Integer> myhash = new HashSet<>();for(int i = start; i < nums.length ; i++){if(nums[i] < upnum){ // 如果本层的某个元素小于上一层父节点大小 continue跳过 【树枝必须按照从小到大】continue;}if(myhash.contains(nums[i])){ // 如果在同层元素重复(这里无法排序,所以无法使用之前的flag,采用hashset) continue跳过 【树层去重】continue;}temp.add(nums[i]);myhash.add(nums[i]);if(temp.size()>=2){result.add(new ArrayList<>(temp));}helper(nums,i+1,nums[i]);temp.removeLast();}}
}