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, 6, 7], [4, 6, 7, 7], [4, 7], [4, 7, 7], [6, 7], [6, 7, 7], [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.

### Solution

So the solution here will be start with the each number in the input array and build the increasing non-duplicate subsequences. Like when we start with `4`

and try to build subsequences around `4`

, we will get `[4, 6], [4, 6, 7], [4, 6, 7, 7], [4, 7], [4, 7, 7]`

. We will be using recursion to achieve the desired results

package com.programtalk.learn.interview.questions; import java.util.ArrayList; import java.util.List; /** * * @author programtalk.com * */ public class IncreasingSubsequencesSolution { public List<List<Integer>> findSubsequences(int[] input) { List<List<Integer>> result = new ArrayList<>(); findSequence(result, new ArrayList<Integer>(), input, 0); return result; } private void findSequence(List<List<Integer>> result, List<Integer> list, int[] nums, int id) { if (list.size() >= 2) { // add the created subsequences to the result result.add(new ArrayList<Integer>(list)); } List<Integer> unique = new ArrayList<Integer>(); for (int i = id; i < nums.length; i++) { if (id > 0 && nums[i] < nums[id - 1]) { // we need increasing numbers or equal numbers continue; } if (unique.contains(nums[i])) { // skip duplicates for subsequences continue; } unique.add(nums[i]); list.add(nums[i]); findSequence(result, list, nums, i + 1); list.remove(list.size() - 1); } } public static void main(String[] args) { int[] input = {4,6,7,7}; List<List<Integer>> subsequences = new IncreasingSubsequencesSolution().findSubsequences(input); System.out.println(subsequences); } }