LeetCode 90. Subsets II
原题链接
简单
作者:
小张同学
,
2020-02-25 23:29:25
,
所有人可见
,
阅读 658
因为有重复数字,所以先排序,然后对重复数字的区间进行排列,对不重复数字枚举
C++ 代码
class Solution {
public:
vector<vector<int>> ans;
vector<int> path;
void dfs(int u, vector<int>& nums)
{
if (u == nums.size())
{
ans.push_back(path);
return;
}
int k = u; // k 从u开始记录到重复数字的下一个
while(k < nums.size() && nums[k] == nums[u]) k ++ ; // 不重复数字的枚举
dfs(k, nums);
for (int i = u ; i < k ; i ++ ) // 对重复区间做取排列
{
path.push_back(nums[i]);
dfs(k, nums);
}
path.erase(path.end() - (k - u), path.end());
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(), nums.end());
dfs(0, nums);
return ans;
}
};
我的理解好像还是有些问题,欢迎教导与指正~
from 欧阳同学