leetcode subset ||
2014-08-28 20:53
309 查看
此题与 subset | 相比,给定的数组中存在重复的元素,为了避免子集中出现重复,在DFS过程中需要判断具体情况
具体思路参考/article/4879672.html
代码
具体思路参考/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); } };
相关文章推荐
- [LeetCode]368. Largest Divisible Subset
- LeetCode "Largest Divisible Subset" !
- [LeetCode]368. Largest Divisible Subset(自学留存)
- Leetcode 368. Largest Divisible Subset (Medium) (cpp)
- 【Leetcode】Largest Divisible Subset
- Leetcode: Largest Divisible Subset
- LeetCode: Partition Equal Subset Sum
- LeetCode—368. Largest Divisible Subset
- Leetcode 368. Largest Divisible Subset
- leetcode--- Partition Equal Subset Sum---动规
- leetcode 416 c++. Partition Equal Subset Sum
- [LeetCode] Partition Equal Subset Sum
- LeetCode[368] Largest Divisible Subset
- LeetCode-Largest Divisble Subset
- Partition Equal Subset Sum - leetcode 416号题目个人题解
- leetcode78subset
- LeetCode 练习: Subset ii
- leetcode 数组求子集(subset)
- 【Leetcode】Largest Divisible Subset
- Leetcode 416. Partition Equal Subset Sum[medium]