题目:
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);
}
}
}
}