class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums , int indnx )
{
//小于2的不加入结果,至少两个
if(path.size()>=2) result.push_back(path);
if(indnx >= nums.size()) return;
//用set统计每一层相同值元素的使用
unordered_set<int> uset;
for(int i =indnx ; i<nums.size(); i++)
{
//如果当前值小于上一个,或者这个值在该层用过了,跳过
if(path.empty() == 0 && nums[i] < path.back()
|| uset.find(nums[i]) != uset.end())
continue;
//将该使用过的存入set,标记使用过
uset.insert(nums[i]);
path.push_back(nums[i]);
backtracking(nums,i+1 );
path.pop_back();
}
return;
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
backtracking(nums,0);
return result;
}
};