OJ.evalRPN逆波兰表达式
Posted mbf330
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OJ.evalRPN逆波兰表达式相关的知识,希望对你有一定的参考价值。
来自某扣的OJ小练习
根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
解决方法:
建立一个栈,遇到数字便入栈,遇到运算符便运算,使栈顶数据作为右值,栈顶的前一个值作为左值,运算之后的结果继续入栈,最终返回栈中唯一数据,即栈顶即可。
int evalRPN(vector<string>& tokens)
//建立栈
stack<int> st;
//遍历tokens进行操作
for(auto& str:tokens)
如果是运算符,进行运算后入栈
if(str=="+"||str=="-"||str=="*"||str=="/")
//定义运算符右值并将其出栈,之后的栈顶数据即为运算符左值
int right=st.top();
st.pop();
//定义左值并将其出栈
int left=st.top();
st.pop();
//进行运算后继续入栈,进行下一步操作,继续将int值入栈或继续进行运算
if(str=="+")st.push(left+right);
if(str=="-")st.push(left-right);
if(str=="*")st.push(left*right);
if(str=="/")st.push(left/right);
//将tokens中的string型转为int型,并入栈
else
st.push(stoi(str));
return st.top();
图解:
以上是关于OJ.evalRPN逆波兰表达式的主要内容,如果未能解决你的问题,请参考以下文章