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;
    }
};

分析:spa

受教了。3d

相關文章
相關標籤/搜索