
💻博主正在持续更新关于LeetCode的习题。 😽如果你觉得内容还不错,请多多点赞。 🐶如果你觉得对你有帮助,请多多收藏。(防止以后找不到了) 👨👩👧👦如果你想阅读更多的LeetCode习题讲解,请多多关注博主。
逆波兰表达式由波兰的逻辑学家卢卡西维兹提出。逆波兰表达式的特点是:
因此,逆波兰表达式也称后缀表达式。

//逆波兰表达式求值——栈
#include<iostream>
#include<vector>
#include<stack>
#include<string>
#include<cstdlib>
#include<stdexcept>
using namespace std;
class Solution {
public:
int evalRPN(vector<string>& tokens)
{
stack<int>stk;
for(const string& str :tokens)
{
if(isNumber(str))
{
stk.push(atoi(str.c_str()));
}
else
{
int num2=stk.top();
stk.pop();
int num1=stk.top();
stk.pop();
switch(str[0])
{
case '+':
stk.push(num1+num2);
break;
case '-':
stk.push(num1-num2);
break;
case '*':
stk.push(num1*num2);
break;
case '/':
if(num2==0)
{
throw runtime_error("除以零错误");
}
stk.push(num1/num2);
break;
default:
throw runtime_error("未定义运算符"+str);
}
}
}
return stk.top();
}
bool isNumber(const string& str)
{
return !(str=="+"||str=="-"||str=="*"||str=="/");
}
};
int main()
{
vector<string>tokens = { "4","13","5","/","+" };
Solution value;
int result = value.evalRPN(tokens);
cout << "逆波兰表达式的结果是:" << result << endl;
return 0;
}输入:vector
<string>tokens = { “4”,“13”,“5”,“/”,“+” };

输出:6





//逆波兰表达式求值——栈
#include<iostream>
#include<vector>
#include<string>
#include<cstdlib>
#include<cctype>
using namespace std;
class Solution {
public:
int evalRPN(vector<string>& tokens)
{
int n=tokens.size();
vector<int>stk((n+1)/2);
int index=-1;
for (string& str:tokens)
{
if(str.length()>1||isdigit(str[0]))
{
index++;
stk[index]=atoi(str.c_str());
}
else
{
switch(str[0])
{
case '+':
index--;
stk[index]+=stk[index+1];
break;
case '-':
index--;
stk[index]-=stk[index+1];
break;
case '*':
index--;
stk[index]*=stk[index+1];
break;
case '/':
index--;
stk[index]/=stk[index+1];
break;
}
}
}
return stk[index];
}
};
int main()
{
vector<string>tokens = { "4","13","5","/","+" };
Solution value;
int result = value.evalRPN(tokens);
cout << "逆波兰表达式的结果是:" << result << endl;
return 0;
}输入:vector
<string>tokens = { “4”,“13”,“5”,“/”,“+” };

输出:6

if(str.length()>1||isdigit(str[0]))
int index=-1;
index++;
stk[index]=atoi(str.c_str());
index--;
stk[index]+=stk[index+1];