class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int>s;
for(int i=0;i<tokens.size();i++){
if((tokens[i][0]>'9'||tokens[i][0]<'0')&&tokens[i].size()==1){
int b=s.top();
s.pop();
int a=s.top();
s.pop();
if(tokens[i][0]=='+') a=a+b;
else if(tokens[i][0]=='-') a=a-b;
else if(tokens[i][0]=='*') a=a*b;
else a=a/b;
s.push(a);
}
else{
int num=0;
if(tokens[i][0]=='-')
for(int j=1;j<tokens[i].size();j++){
num=num*10+(tokens[i][j]-'0');
}
else
for(int j=0;j<tokens[i].size();j++){
num=num*10+(tokens[i][j]-'0');
}
if(tokens[i][0]=='-') num=-num;
s.push(num);
}
}
return s.top();
}
};
剑指 Offer II 037. 小行星碰撞
分情况讨论进栈和出栈
class Solution {
public:
vector<int> asteroidCollision(vector<int>& nums) {
int i=0,n=nums.size();
vector<int> stk;
while(i<n){
// 三种情况无脑进栈
if(stk.empty()||stk.back()<0||nums[i]>0)stk.push_back(nums[i]);
else if(stk.back()<=-nums[i]){
int t=stk.back();stk.pop_back();
// 重新开始if判断,这里i没有进行递增,还是当前元素进行判断的
if(t<-nums[i])continue;
}
i++;
}
return stk;
}
};
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
stack<int>s;
vector<int>ans(temperatures.size());
for(int i=0;i<temperatures.size();i++){
if(s.empty()) s.push(i);
else{
if(temperatures[i]<=temperatures[s.top()]) s.push(i);
else{
while(!s.empty()&&temperatures[i]>temperatures[s.top()]){
int t=s.top();
s.pop();
ans[t]=i-t;
}
s.push(i);
}
}
}
return ans;
}
};