原题
491. 递增子序列
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。
示例:
输入: [4, 6, 7, 7]
输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]
class Solution {
public List<List<Integer>> findSubsequences(int[] nums) {
Set<List<Integer>>res=new HashSet<>();
help(res,new ArrayList<>(),0,nums);
return new ArrayList(res);
}
void help(Set<List<Integer>> res,List<Integer> cur,int start,int []nums){
if(cur.size()>=2)res.add(new ArrayList<Integer>(cur));
for(int i=start;i<nums.length;i++){
if(cur.size()==0||cur.get(cur.size()-1)<=nums[i]){
cur.add(nums[i]);//如果选当前元素
help(res,cur,i+1,nums);
cur.remove(cur.size()-1);//如果不选当前元素,回溯
}
}
}
}