这道题也是一道经典的栈应用题。为什么这样说呢?我们可以发现,当我们遍历到运算符号的时候,我们就需要操控这个运算符之前的两个相邻的数。这里相邻数不仅仅指最初数组里相邻的数,在进行了运算之后,得到的结果与后面的数也可以理解为相邻。这样的涉及操作相邻元素描述是不是跟删除字符串中的所有相邻重复项(力扣1047)-CSDN博客 这道题十分类似呢?因此我们自然想到使用栈来解决这个问题。还有的注意点我写在代码注释中,代码如下:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> st;
long long num1,num2;
for(int i = 0;i < tokens.size();i++){
if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/"){
//弹出前两个数进行运算
num1 = st.top();
st.pop();
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{
//stoll函数将数字字符串转换为数字
st.push(stoll(tokens[i]));
}
}
//最后栈中就一个数,正是最终结果
long long result = st.top();
return result;
}
};