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; } };
分析:
受教了。