1.题目描述
题目链接
例如:
tokens = [“2”,“1”,“+”,“3”,“*”]
该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
解题思路:
扫描tokens数组,如果是数字则放入栈中,如果是运算符,则从栈中取出两个操作数,并将运算结果放入栈中,最终栈中存入的数则是运算结果。
2.测试代码
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> sta;//定义一个栈
for(int i=0;i<tokens.size();i++){
if(tokens[i]=="+" || tokens[i]=="-" || tokens[i]=="*" || tokens[i]=="/"){
int x;
int y;
x=sta.top();//后操作数
sta.pop();
y=sta.top();//前操作数
sta.pop();
if(tokens[i]=="+"){
sta.push(y+x);
}else if(tokens[i]=="-"){
sta.push(y-x);
}else if(tokens[i]=="*"){
sta.push(y*x);
}else{
sta.push(y/x);
}
}else{
sta.push(stoi(tokens[i]));//stoi是一个库函数,用于把字符串转换为整数
}
}
int result;
result=sta.top();
return result;
}
};
3.测试结果
逆波兰表达式求值问题是一个典型的用栈来实现的问题。