//该题目的难点是容易忽略边界情况下的操作(栈满时的入栈,栈空时的出栈)
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;
}
};