1 Star 0 Fork 0

MetaverseMobile/leetcode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
子集 II.cpp 1.28 KB
一键复制 编辑 原始数据 按行查看 历史
TieNan2019 提交于 2021-03-07 21:56 . Create 子集 II.cpp
class Solution {
public:
void recursion(int *seq, int len, map<int, int>::iterator it,
const map<int, int>::iterator end, vector<vector<int>> &ans) {
if (it == end) {
ans.emplace_back(seq, seq + len);
return ;
}
/* 先一次性填入元素 */
for (int i = 0; i < it->second; i++)
seq[len + i] = it->first;
auto next = it;
next++;
/* 务必要按照从多到少的顺序填入数据, 否则每次都需要重写缓冲区 */
for (int k = it->second; k >= 0; k--) {
recursion(seq, len + k, next, end, ans);
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
/* 先对元素计数就可以很容易解决去重排列的问题 */
map<int, int> counter;
for (int &x : nums)
counter[x]++;
int *seq = new int[nums.size()+1];
vector<vector<int>> ans;
recursion(seq, 0, counter.begin(), counter.end(), ans);
delete[] seq;
return ans;
}
};
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/MetaverseMobile/leetcode.git
[email protected]:MetaverseMobile/leetcode.git
MetaverseMobile
leetcode
leetcode
main

搜索帮助