题目:
Given an integer array, your task is to find all the different possible increasing subsequences of the given array, and the length of an increasing subsequence should be at least 2 .
Example:
Input: [4, 6, 7, 7] Output: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]
Note:
The length of the given array will not exceed 15.The range of integer in the given array is [-100,100].The given array may contain duplicates, and two equal integers should also be considered as a special case of increasing sequence. 分析 :用递归的方式暴力搜索。从当前节点起往后找比自己大的点,找到了,就存起来,然后进入下一层递归。注意,我第一次提交的时候TLE了,然后看了下排名第一的solution,说是beat100%,竟然和我写的一模一样,后来又交了一次,过了,但只beat了20%左右。
Java实现:
public class Solution { public List<List<Integer>> findSubsequences(int[] nums) { List<Integer> tmp = new ArrayList<>(); Set<List<Integer>> ans = new HashSet<List<Integer>>(); combination(nums, 0, ans, tmp); return (new ArrayList(ans)); } public void combination(int[] nums, int start,Set<List<Integer>> ans, List<Integer> tmp) { for(int i=start; i<nums.length; ++i) { if(tmp.size()==0 || nums[i]>=tmp.get(tmp.size()-1)) { tmp.add(nums[i]); if(tmp.size()>=2) ans.add(new ArrayList(tmp)); combination(nums, i+1, ans, tmp); tmp.remove(tmp.size()-1); } } } }
