当前位置: 首页 > news >正文

leetcode90 子集II

1. 题意

给一个可能含有重复元素的数组,求这个数组的所有子集。

2. 题解

跟leetcode 72 子集的差别在于,我们需要将重复的元素给去掉。那如何去重呢,实际上我们可以先排序将重复的元素给放在一起。然后在回溯后,找到下一个不与当前元素相同的位置。

2.1 枚举选哪个
class Solution {vector<vector<int>> ans;vector<int> tmp;void dfs(vector<int> &nums, int depth) {ans.push_back(tmp);int sz = nums.size();for (int i = depth;i <sz; i++) {tmp.push_back( nums[i] );dfs( nums, i + 1);tmp.pop_back();while (i + 1 < sz && nums[i + 1] == nums[i]) {i++;}}   }
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {sort( nums.begin(), nums.end() );dfs(nums, 0);return ans;}
};
2.2 选或不选
class Solution {
public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {ranges::sort(nums);int n = nums.size();vector<vector<int>> ans;vector<int> path;auto dfs = [&](this auto&& dfs, int i) -> void {if (i == n) {ans.push_back(path);return;}// 选 xint x = nums[i];path.push_back(x);dfs(i + 1);path.pop_back(); // 恢复现场// 不选 x,跳过所有等于 x 的数// 如果不跳过这些数,会导致「选 x 不选 x'」和「不选 x 选 x'」这两种情况都会加到 ans 中,这就重复了i++;while (i < n && nums[i] == x) {i++;}dfs(i);};dfs(0);return ans;}
};

Ref

0x3f

http://www.lryc.cn/news/533069.html

相关文章:

  • DeepSeek模型构建与训练
  • PyTorch torch.unbind、torch.split 和 torch.chunk函数介绍
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》061-Vue Router的动态路由
  • 杭州某小厂面试
  • C基础寒假练习(8)
  • 设计模式 ->模板方法模式(Template Method Pattern)
  • Redis存储⑤Redis五大数据类型之 List 和 Set。
  • MySQL开窗函数种类和使用总结
  • DeepSeek——DeepSeek模型部署实战
  • zsh: command not found: pip
  • 机器学习数学基础:16.方程组
  • 即梦(Dreamina)技术浅析(四):生成对抗网络
  • 2025年软件测试五大趋势:AI、API安全、云测试等前沿实践
  • Vue混入(Mixins)与插件开发深度解析
  • 【C++】C++11
  • k8sollama部署deepseek-R1模型,内网无坑
  • mysql8 C++源码中创建表函数,表字段最大数量限制,表行最大存储限制
  • 胜任力冰山模型:深入探索职业能力的多维结构
  • 什么是三层交换技术?与二层有什么区别?
  • Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 替代】
  • DeepSeek LLM(初代)阅读报告
  • JAVA异步的TCP 通讯-服务端
  • 高效协同,Tita 助力项目管理场景革新
  • 【AIGC魔童】DeepSeek v3提示词Prompt书写技巧
  • Vue | 透传 Attributes(非 prop 的 attribute )
  • 启明星辰发布MAF大模型应用防火墙产品,提升DeepSeek类企业用户安全
  • Vuex 解析:从 Vue 2 到 Vue 3 的演变与最佳实践
  • 一文解释nn、nn.Module与nn.functional的用法与区别
  • 日志统计(acWing,蓝桥杯)
  • 3个DeepSeek隐藏玩法