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());
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端