- 数据结构:栈,队,优先队列
- 编程语言:c++
- 运行环境:牛客网在线OJ
- 代码结构:for循环遍历字符串中所有的元素
- 如果字符是"#",那么前面的数字就要入栈
- 如果字符串是"+","-","*"中的任意一个,此时栈中就有两个数字,就需要两次提取栈顶中的元素,两次弹栈--保证下次有’#‘时,我们的栈中没有数字。
题目如下:
解题:
class Solution {
public:
long long legalExp(string str) {
stack<long long>res;
long long a,b,sum=0;
for(int i =0;i<str.length();i++){
if(str[i]=='+'||str[i]=='-'||str[i]=='*'){
a = res.top();
res.pop();
b = res.top();
res.pop();
if(str[i]=='-')res.push(b-a);//顺序是b-a
else if(str[i]=='*')res.push(a*b);
else res.push(a+b);
}
else if(str[i]=='#'){
res.push(sum);
sum = 0;
}
else{
sum = sum*10+str[i]-'0';//把字符串表示的数字转换成长整型表示的数字
}
}
return res.top();//因为每次+,-,*运算之后,栈中就只有一个元素
}
};