491 Increasing Subsequences

491 Increasing Subsequences



class Solution {
    public List<List<Integer>> findSubsequences(int[] nums) {
      Set<List<Integer>> set = new HashSet<>();
      
      List<Integer> tempList = new ArrayList<>();
      
      
      dfs(set, tempList, nums, 0);
      return new ArrayList<>(set); // new ArrayList<>();
        
    }
  
    private void dfs(Set<List<Integer>> set, List<Integer> tempList, int[] nums, int index){
      if(tempList.size() > 1){
        set.add(new ArrayList<>(tempList));
      }
      
      // add numbers
      for(int i = index; i < nums.length; i++){
        if(tempList.size() == 0 || tempList.get(tempList.size() - 1) <= nums[i]){
          tempList.add(nums[i]);
          dfs(set, tempList, nums, i + 1 ); // be careful , not index + 1 
          tempList.remove(tempList.size() - 1);
        }
      }
    }
}


https://www.youtube.com/watch?v=dl68syidyLM&t=242s 


注意reference 写法。。这个还不熟
画 dfs 图


https://leetcode.com/problems/increasing-subsequences/discuss/97130/Java-20-lines-backtracking-solution-using-set-beats-100.

猜你喜欢

转载自www.cnblogs.com/tobeabetterpig/p/9454918.html