力扣题目链接
class Solution {
public:
int evalRPN(vector<string>& tokens) {
// 力扣修改了后台测试数据,需要用longlong
stack<long long> st;
for (int i = 0; i < tokens.size(); i++) {
if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {
long long num1 = st.top();
st.pop();
long long 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(stoll(tokens[i]));
}
}
int result = st.top();
st.pop(); // 把栈里最后一个元素弹出(其实不弹出也没事)
return result;
}
};
c++里面不熟悉的函数可以自己搜索学会~
逆波兰表达式也要理解是个什么嘿嘿嘿
自己写就细节方面到处出错。。。。
一、出错点
1.一开始不知道如何运用栈求逆波兰表达式的值。
2.代码错误。
二、理解后的思路
求逆波兰表达式的值
看到一个运算符就计算前两个数字
栈的最后表演! | LeetCode:150. 逆波兰表达式求值_哔哩哔哩_bilibili
那么来看一下本题,其实逆波兰表达式相当于是二叉树中的后序遍历。 大家可以把运算符作为中间节点,按照后序遍历的规则画出一个二叉树。
但我们没有必要从二叉树的角度去解决这个问题,只要知道逆波兰表达式是用后序遍历的方式把二叉树序列化了,就可以了。
在进一步看,本题中每一个子表达式要得出一个结果,然后拿这个结果再进行运算
三、总结
回顾之前的题目,不看答案自己独立敲代码,自己调试。减少代码出错的几率,锻炼熟练度。
对于栈的知识要把它的函数全部都很熟悉啊~