#include "s0090_subsets_ii.hpp" void subsetsWithDupDFS(vector &subset, vector> &result, vector &nums, int startIndex, vector &used) { int size = nums.size(); // 结束条件 if (startIndex == size) return; for (int i = startIndex; i < size; ++i) { // 剪枝,保留树枝重复 if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) continue; subset.push_back(nums[i]); result.push_back(subset); used[i] = true; subsetsWithDupDFS(subset, result, nums, i + 1, used); used[i] = false; subset.pop_back(); } } vector> S0090::subsetsWithDup(vector &nums) { vector subset{}; vector> result{}; vector used(nums.size(), false); sort(nums.begin(), nums.end()); subsetsWithDupDFS(subset, result, nums, 0, used); result.push_back(vector{}); return result; }