一:论语
二:题目
三:上码
class Solution {
public:vector<vector<int> >ans;vector<vector<int> >ans1;vector<int> path;void backstacking(vector<int>& nums,int index) {if(path.size() >= 2) {ans.push_back(path);}unordered_set<int> uset; // 使用set对本层元素进行去重for(int i = index; i < nums.size(); i++) {//当递归到这层的时候 如果我们不是递增的时候就直接跳过if(!path.empty() && nums[i] < path.back()) continue;if(uset.find(nums[i]) != uset.end()) continue;//去重 不等于最后一个元素的话 那么就是//容器中有这个元素uset.insert(nums[i]);path.push_back(nums[i]);backstacking(nums,i+1);path.pop_back();}}vector<vector<int>> findSubsequences(vector<int>& nums) {/**思路:1.这里我们处理递增顺序的时候需要注意的 我们在回溯的递归中 纵向的递归中 我们用 nums[i] 和path.back() 进行比较 如果不是递增的话 那么我们就选择 continue 越过本次的for循环的一个元素2.注意题目中说的是不同的递增子序列,那么我们还是双管齐下 第一管:我们设置 index 第二管:我们先排序的话 然后的话 再在回溯的横向遍历的时候 遇见相同的元素 直接跳过但这并不影响 纵向遍历的时候 遇见相同的元素还可以在path中 但是本题中我们不能排序但是我们们可以设置一个set容器来解决*/ backstacking(nums,0);return ans;}
};
晚安!