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