思路
重点是在树枝去重的时候不能使用之前的used去重了,原因是题目中不允许对序列进行排序,只有排序后才能把相同数字放一起,才能用used数组完成去重
代码
cpp
class Solution {
public:
vector<int> path;
vector<vector<int>> result;
void backtracking(vector<int> nums, int startIndex){
if(path.size() >= 2){
result.push_back(path);
}
unordered_set<int> uset;
for(int i = startIndex; i < nums.size(); i++){
if(path.size() > 0 && path[ path.size() - 1] > nums[i]) continue;
if(uset.find(nums[i]) != uset.end()) continue;
uset.insert(nums[i]);
path.push_back(nums[i]);
backtracking(nums, i+1);
path.pop_back();
}
return;
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
path.clear();
result.clear();
backtracking(nums, 0);
return result;
}
};