491. 递增子序列
作者:互联网
✅做题思路or感想
这一题依旧是子序列问题,用回溯法
然而这道题在有相同元素的情况下还要求不同的递增子序列,这就代表了不能对原数组进行排序!,因此就不能像前面一样用used数组进行树层去重了
我思来想去找不到更好的方法,只能靠用set强行去重来AC了,惭愧
class Solution {
public:
vector<vector<int>>result;
vector<int>temp;
void dfs(vector<int>& nums, int startIndex) {
for (int i = startIndex; i < nums.size(); i++) {
//保证子序列的递增
if (temp.size() < 1 || temp.back() <= nums[i]) {
temp.push_back(nums[i]);
//子序列的长度至少为2
if (temp.size() > 1)result.push_back(temp);
dfs(nums, i + 1);
temp.pop_back(); //回溯
}
}
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
dfs(nums, 0);
//使用set暴力去重
set<vector<int>>Set(result.begin(), result.end());
return vector<vector<int>>(Set.begin(), Set.end());
}
};
标签:set,temp,nums,递增,dfs,vector,result,序列,491 来源: https://www.cnblogs.com/doomaa/p/16093739.html