2023-05-01 逆波兰表达式
力扣题目:Link
分析过程:
简单的逆波兰表达式求解实现,其核心逻辑为:
- 当读取到非运算符:
- 压入栈
- 当读取到运算符(加减乘除):
- 取出栈顶两个数
- 做运算
- 运算结果压入栈顶
- 运行完毕时,栈中只存在一个数,即栈顶为运算结果:
- 此时取出栈顶结果
- 返回结果
实现代码如下
/* LeetCode Question No.150*/
/* code from 代码随想录 */
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> st;
for (int i = 0; i < tokens.size(); i++) {
// 当读取到运算符时
if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {
// 取出栈顶两个数
int num1 = st.top();
st.pop();
int num2 = st.top();
st.pop();
// 做对应运算,并将运算结果压入栈顶
if (tokens[i] == "+") st.push(num2+num1);
if (tokens[i] == "-") st.push(num2-num1);
if (tokens[i] == "*") st.push(num2*num1);
if (tokens[i] == "/") st.push(num2/num1);
} else {
// 非运算符压入栈
st.push(stoi(tokens[i]));
}
}
// 运算完毕,取出栈顶结果
int result = st.top();
st.pop();
// 返回结果
return result;
}
};