491. 递增子序列

491. 递增子序列

这题我没做出来

class Solution {
    List<List<Integer>> res = new ArrayList<>();
    LinkedList<Integer> path = new LinkedList<>();
    public List<List<Integer>> findSubsequences(int[] nums) {
        backtracking(nums, Integer.MIN_VALUE,0);
        return res;
    }
    
    public void backtracking(int[] nums,int last, int startIndex){
        if(startIndex == nums.length){
            if( path.size() >= 2){
                res.add(new ArrayList<>(path));
            }
            return;
        }
        

        if(nums[startIndex] >= last){
            path.add(nums[startIndex]);
            backtracking(nums,nums[startIndex],startIndex + 1);
            path.pollLast();
        }
        if(nums[startIndex] != last){
            backtracking(nums,last,startIndex + 1);
        }
        
    }
}

class Solution {
    private List<Integer> path = new ArrayList<>();
    private List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> findSubsequences(int[] nums) {
        backtracking(nums,0);
        return res;
    }

    private void backtracking (int[] nums, int start) {
        if (path.size() > 1) {
            res.add(new ArrayList<>(path));
        }

        int[] used = new int[201];
        for (int i = start; i < nums.length; i++) {
            if (!path.isEmpty() && nums[i] < path.get(path.size() - 1) ||
                    (used[nums[i] + 100] == 1)) continue;
            used[nums[i] + 100] = 1;
            path.add(nums[i]);
            backtracking(nums, i + 1);
            path.remove(path.size() - 1);
        }
    }
}

两种算法都是每一层如果出现和last相同的元素则

上一篇:力扣算法篇:分割回文串


下一篇:回溯算法精讲