leecode第九十题(子集II)

class Solution {
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        int len=nums.size();
        sort(nums.begin(),nums.end());//唉,排序啊
        
        vector<vector<int>> result;
        vector<int> temp;
        result.push_back(temp);
        if(len==0)
            return result;
        else//首先将第一个字符打进去
        {
            temp.push_back(nums[0]);
            result.push_back(temp);
        }
        int new_num=1;//设置一个指针,为上一步新添加vector的起始位置
            
        
        for(int i=1;i<len;i++)
        {
            int start=0;
            if(nums[i]==nums[i-1])//如果当前字符和上一个字符相等,则从new_num开始
                start=new_num;
            int len_cur_res=result.size();
            
            while(start<len_cur_res)//为start到最后所有的vector后接一个num[i],然后重新打入result
            {
                temp=result[start];
                temp.push_back(nums[i]);
                result.push_back(temp);
                start++;
            }
            
            new_num=len_cur_res;//更新指针
        }
        return result;
    }
};

分析:

受教了。

posted @ 2019-07-22 09:36  深夜十二点三十三  阅读(152)  评论(0编辑  收藏  举报