150. 逆波兰表达式求值

150. 逆波兰表达式求值

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

有效的算符为 ‘+’、‘-’、‘*’ 和 ‘/’ 。
每个操作数(运算对象)都可以是一个整数或者另一个表达式。
两个整数之间的除法总是 向零截断 。
表达式中不含除零运算。
输入是一个根据逆波兰表示法表示的算术表达式。
答案及所有中间计算结果可以用 32 位 整数表示。

class Solution {
public:
bool isNumber(const string& s) {
    return !(s == "+" || s == "-" || s == "*" || s == "/");
}
    int evalRPN(vector<string>& tokens) {
        int length=tokens.size();
        stack<int> tmp;
        for(int i=0;i<length;i++){
            if (isNumber(tokens[i])) {
                tmp.push(stoi(tokens[i]));
            }else if(tokens[i]=="+"){
                int tmp1=tmp.top();
                tmp.pop();
                int tmp2=tmp.top();
                tmp.pop();
                int tmp3=tmp1+tmp2;
                tmp.push(tmp3);
            }else if(tokens[i]=="*"){
                int tmp1=tmp.top();
                tmp.pop();
                int tmp2=tmp.top();
                tmp.pop();
                int tmp3=tmp1*tmp2;
                tmp.push(tmp3);
            }else if(tokens[i]=="/"){
                int tmp1=tmp.top();
                tmp.pop();
                int tmp2=tmp.top();
                tmp.pop();
                int tmp3=tmp2/tmp1;
                tmp.push(tmp3);
            }else{
                int tmp1=tmp.top();
                tmp.pop();
                int tmp2=tmp.top();
                tmp.pop();
                int tmp3=tmp2-tmp1;
                tmp.push(tmp3);
            }
        }
        return tmp.top();
    }
};

你可能感兴趣的:(算法,数据结构,c++)