您的位置:首页 > 其它

leetcode subset ||

2014-08-28 20:53 309 查看
此题与 subset | 相比,给定的数组中存在重复的元素,为了避免子集中出现重复,在DFS过程中需要判断具体情况

具体思路参考/article/4879672.html

代码

class Solution {
public:
vector<vector<int> > subsetsWithDup(vector<int> &S) {

vector<vector<int> > res;
vector<int> tempSubset;
sort(S.begin(), S.end());
subsetHelper(res, tempSubset, 0, S);
return res;
}

void subsetHelper(vector<vector<int> > &res, vector<int> tempSubset, int iEnd, vector<int> S)
{
if(iEnd==S.size())
{
res.push_back(tempSubset);
return;
}

int firstSameNum = iEnd;

//对于某一元素,若其重复,则找到在原数组中该元素第一个出现的位置
while(firstSameNum>=0&&S[firstSameNum]==S[iEnd]) firstSameNum--;

//减‘一’是为了去除当前元素
int sameCnt = iEnd - firstSameNum-1;

//若该元素在已遍历的数组中没有重复元素 或者 有重复元素且在tempSubset中该重复元素的个数即为到目前为止遍历原来的数组S时重复出现该元素的个数
//此时即将该元素加入tempSubset
if(sameCnt==0||sameCnt<=tempSubset.size()&&tempSubset[tempSubset.size()-sameCnt]==S[iEnd])
{
tempSubset.push_back(S[iEnd]);
subsetHelper(res, tempSubset, iEnd+1, S);
tempSubset.pop_back();
}

subsetHelper(res, tempSubset, iEnd+1, S);

}
};



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: