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.
类似combination,也可以用back tracking来做
class Solution {
public List<List<Integer>> findSubsequences(int[] nums) {
Set<List<Integer>> rt = new HashSet<>();
helper(rt, nums, 0, new ArrayList<>());
List<List<Integer>> r = new ArrayList<>();
r.addAll(rt);
return r;
}
private void helper(Set<List<Integer>> rt, int[] nums, int i, List<Integer> cur) {
if (i == nums.length) {
if (cur.size() > 1) rt.add(cur);
return;
}
if (cur.isEmpty() || nums[i] >= cur.get(cur.size() - 1)) {
List<Integer> list = new ArrayList<>(cur);
list.add(nums[i]);
helper(rt, nums, i + 1, list);
}
helper(rt, nums, i + 1, cur);
}
}
No comments:
Post a Comment