题目分析:
- 对给定的数组(数组中可能存在重复元素),求该数组的所有子集。
解题思路:
dfs实现
1)首先对数组进行排序;
2)利用dfs求排序后数组的所有子集。
注意:当dfs处理中出现重复元素时,则进行跳过处理即可。
实现程序
class Solution { vector< vector<int> > subsetsWithDup(vector<int> &nums) { vector< vector<int> > result; vector<int> temp; // 先对数组进行排序 sort(nums.begin(), nums.end()); // dfs深度遍历实现 dfs(nums, 0, temp, result); return result; } void dfs(vector<int> &nums, int start, vector<int> &temp, vector< vector<int> > &result) { result.push_back(temp); for (int i = start; i < nums.size(); i++) { temp.push_back(nums[i]); dfs(nums, i + 1, temp, result); temp.pop_back(); // 如果前后两个元素相等,则跳过 while (nums[i] == nums[i + 1]) i++; } } };