给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。
其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。
题解:利用栈进行模拟,摸清栈先进后出的特性,利用这一特性即可方便的计算后缀表达式。先用栈保存数字,在遇到运算符时取栈顶的两个元素进行运算后再放回栈顶即可。
时间复杂度:
空间复杂度:
参考代码:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
long long solve(string str) {
// write code here
stack<long long> n;
long long s = 0, x = 0, y = 0;
for (int i = 0; i < str.size(); i++)
{
switch (str[i])
{
case '+':
x = n.top();
n.pop();
y = n.top();
n.pop();
n.push(x + y);
break;
case '-':
x = n.top();
n.pop();
y = n.top();
n.pop();
n.push(y - x);
break;
case '*':
x = n.top();
n.pop();
y = n.top();
n.pop();
n.push(x * y);
break;
case '/':
x = n.top();
n.pop();
y = n.top();
n.pop();
n.push(y / x);
break;
case '#':
n.push(s);
s = 0;
break;
default:
s = s * 10 + str[i] - '0';
break;
}
}
return n.top();
}
};
京公网安备 11010502036488号