Evaluate Reverse Polish Notation

Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Some examples:
[“2”, “1”, “+”, “3”, ““] -> ((2 + 1) 3) -> 9
[“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
题意:
计算逆波兰表达式的值。又叫后缀表达式。
分析:
用一个栈存储操作数,遇到操作数直接压入栈内,遇到操作符就把栈顶的两个操作数拿出来运算一下,然后把运算结果放入栈内。

class Solution {
public:
int evalRPN(vector &tokens) {//tokens中每一个元素都是string的字符串。
stack s;
for (auto token : tokens) {
if (!is_operator(token)) {
s.push(token);//如果不是操作符,则将其入栈。
}
else //否则,弹出两个元素为x和y。
{
int y = stoi(s.top());
s.pop();
int x = stoi(s.top());
s.pop();
if (token[0] == ‘+’) x += y;//每一个string字符串的第一个元素。
else if (token[0] == ‘-‘) x -= y;
else if (token[0] == ‘‘) x = y;
else x /= y;
s.push(to_string(x));//将得到的元素放到s栈中。
}
}
return stoi(s.top());
}
private:
bool is_operator(const string &op) {
return op.size() == 1 && string(“+-*/”).find(op) != string::npos;
}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值