代码拉取完成,页面将自动刷新
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;
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。