150. 逆波兰表达式求值

leetcode-150. 逆波兰表达式求值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> st;
for(string str : tokens)
{
if(str == "+" || str == "-" || str == "*"|| str == "/")
{
long long num1 = st.top();
st.pop();
long long num2 = st.top();
st.pop();
if(str == "+")
st.push(num2 + num1);
if(str == "-")
st.push(num2 - num1);
if(str == "*")
st.push(num2 * num1);
if(str == "/")
st.push(num2 / num1);

}
else
{
st.push(stoll(str));
}
}
return st.top();
}
};

这段代码是一个计算逆波兰表达式的函数,其中输入的参数是一个字符串类型的 vector,表示逆波兰表达式。该函数的返回值是计算出的表达式的结果。

逆波兰表达式是一种将运算符放在操作数之后的表示数学表达式的方法。例如,中缀表达式 "3 + 4" 在逆波兰表示法中为 "3 4 +"。

函数通过使用一个堆栈来实现计算逆波兰表达式的功能。在遍历逆波兰表达式时,如果当前的字符串为运算符,则从堆栈中弹出两个操作数,并将它们应用于该运算符。否则,如果当前的字符串为操作数,则将其作为 long long 类型解析,并将其压入堆栈中。

最终,堆栈中仅剩一个元素,即为计算出的逆波兰表达式的结果,将其返回即可。