//该题目的难点是容易忽略边界情况下的操作(栈满时的入栈,栈空时的出栈) class SetOfStacks { public: vector<vector<int> > setOfStacks(vector<vector<int> > ope, int size) { // write code here vector<vector<int>> set; vector<int> s; for(int i=0; i<ope.size();i++){ if(ope[i][0]==1){ if(s.size()<size) s.push_back(ope[i][1]); //栈未满,则入栈 else{ set.push_back(s); s.clear(); s.push_back(ope[i][1]); }//栈满,将其加入集合,然后清空该栈(等同于创了个新栈) } else{ if(s.size()>0){ s.pop_back(); }//栈非空,出栈 else{ if(!set.empty()){ s=set[set.size()-1]; set.pop_back(); s.pop_back(); } }//栈空,若集合非空,则获取上个存满的栈,将其出栈 } } if(!s.empty()) set.push_back(s);//由于满了的栈才会加入集合,所以最后可能剩下没满的栈还没加入 return set; } };