上一题(78. 子集 )的基础上增加了树层去重,其余没有变化
vector<vector<int>> ans;
vector<int> path;
void backtracking(int startIndex, vector<int>& nums) {
ans.push_back(path);
for (int i = startIndex; i < nums.size(); ++i) {
path.push_back(nums[i]);
backtracking(i + 1, nums);
path.pop_back();
// 树层去重
while (i + 1 < nums.size() && nums[i + 1] == nums[i])
++i;
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
std::sort(nums.begin(), nums.end());
backtracking(0, nums);
return ans;
}