90. Subsets II

Given a collection of integers that might contain duplicates, nums, return all possible subsets.

Note: The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,2], a solution is:

[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]

題目鏈接
78. Subsets 是不存在重複的元素,這道是可以有重複的元素。沒有重複的元素的時候:假如元素爲{1,2,3}

第幾個subset 內容 個數
第1個 {}
第2個 {1} 2^0個
第3-4個 {2},{1,2} 2^1個
第5-8個 {3},{1,3},{2,3},{1,2,3} 2^2個

  每個元素依次加入到之前的子集中。
  如果存在重複的元素,可以看作是一個元素,記錄元素的重複次數,如{1,2,2},2可以加入兩次。

//Language: cpp     Runtime: 9 ms
class Solution {
public:
    vector<vector<int> > subsetsWithDup(vector<int> &S) {
        vector<vector<int> > res(1,vector<int>(0));
        sort(S.begin(),S.end());
        int cont=0,vnums=1;
        for(int i=0;i<S.size();i++){
            cont++;
            if(S[i]==S[i+1]){
                continue;
            }

            int tem=vnums;
            for(int j=0;j<tem;j++){
                vector<int> instance(res[j]);
                for(int k=1;k<=cont;k++){
                    instance.push_back(S[i]);
                    res.push_back(instance);
                    vnums++;
                }
            }
            cont=0;
        }
        return  res;
    }
};
發佈了52 篇原創文章 · 獲贊 23 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章