Subsets II解题报告

作者: 黑山老水 | 来源:发表于2017-06-19 10:47 被阅读13次

Description:

Given a list of numbers that may has duplicate numbers, return all possible subsets

Notice:

Each element in a subset must be in non-descending order.
The ordering between two subsets is free.
The solution set must not contain duplicate subsets.

Example:

If S = [1,2,2], a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]

Link:

http://www.lintcode.com/en/problem/subsets-ii/#

解题方法:

同样是DFS, 只是需要多一个去重步骤。

Tips:

去重代码:
if(i != start && S[i] == S[i-1]) continue;
当循环时碰到与上一个相同的元素直接continue

完整代码:

vector<vector<int> > result; vector<vector<int> > subsetsWithDup(const vector<int> &S) { if(S.size() == 0) { result.push_back({}); return result; } vector<int> source = S; sort(source.begin(), source.end()); vector<int> temp; helper(source, temp, 0); return result; } void helper(const vector<int> &S, vector<int> &temp, int start) { result.push_back(temp); for(int i = start; i < S.size(); i++) { if(i != start && S[i] == S[i-1]) continue; temp.push_back(S[i]); helper(S, temp, i+1); temp.pop_back(); } return; }

相关文章

网友评论

    本文标题:Subsets II解题报告

    本文链接:https://www.haomeiwen.com/subject/mirgqxtx.html