2023.6.20
后缀表达式也是栈的经典应用,注意好细节就行,下面直接上代码:
class Solution {
public:
int evalRPN(vector<string>& tokens)
{
stack<long long> stk;
long long result = 0;
for(int i=0; i<tokens.size(); i++)
{
if(tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/")
{
stk.push(stoll(tokens[i]));
}
else
{
long long num1 = stk.top();
stk.pop();
long long num2 = stk.top();
stk.pop();
if(tokens[i] == "+")
{
result = num1 + num2;
stk.push(result);
}
else if(tokens[i] == "-")
{
result = num2 - num1;
stk.push(result);
}
else if(tokens[i] == "*")
{
result = num1 * num2;
stk.push(result);
}
else if(tokens[i] == "/")
{
result = num2 / num1;
stk.push(result);
}
}
}
return stk.top();
}
};
有些细节提一下:
- 为了防止溢出所以使用long long
- 字符串数组没法直接丢到<int>类型的栈中,需要使用stoll将string转换成long long。 类似的转换还有stoi stol等。
- 每次会把临时结果用result保存,然后丢到栈里,最后返回栈的顶部就是结果。