题目描述:
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是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]]
思路:
利用递归的思想,维护一个栈,将每次找到的比当前栈顶大的数,然后入栈,将更新过后的栈扔进递归函数,然后更新查找的初始位置即从当前的位置后一个位置开始查找。递归函数结束后,取出栈顶,进入下个循环,这样将所有元素都作为栈底元素遍历一遍。
AC代码:
class Solution {
public:
void rec(vector<int>& nums,int start,vector<int>& stack,set<vector<int>>& ans){
if(stack.size()>=2)ans.insert(stack);
for(int i=start;i<nums.size();i++){{
if(!stack.empty()&&stack.back()>nums[i])
continue;
stack.push_back(nums[i]);
rec(nums,i+1,stack,ans);
stack.pop_back();
}}
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
set<vector<int>>ans;
vector<int>stack;
rec(nums,0,stack,ans);
return vector<vector<int>>(ans.begin(),ans.end());
}
};