您的位置:首页 > 编程语言 > Lua

LeetCode 150. Evaluate Reverse Polish Notation

2014-05-29 06:13 411 查看
后缀表达式。

1. 用一个stack<int>维护数字栈,每碰到一个数字都将其压入栈中

2. 碰到操作符便将其弹出,同时弹出数字栈中的两个数字,再将计算结果压回栈中。

3. 最终栈顶元素即为所求

代码:

inline bool is_opeartor(const string& c)
{
return c.size()==1 && (c[0]=='+' || c[0]=='-' || c[0]=='*' || c[0]=='/');
}

inline int string_to_int(const string& s)
{
int ret;

stringstream ss;
ss << s;
ss >> ret;

return ret;
}

int calculate(int op1, int op2, const string& operand)
{
if (operand[0] == '+')
{
return op1 + op2;
} else if (operand[0] == '-')
{
return op1 - op2;
} else if (operand[0] == '*')
{
return op1 * op2;
} else //
{
return op1 / op2;
}
}

int evalRPN(vector<string> &tokens)
{
stack<int> operand;

for (size_t i = 0; i < tokens.size(); ++ i)
{
if (is_opeartor(tokens[i]))
{
int op2 = operand.top();
operand.pop();
int op1 = operand.top();
operand.pop();
operand.push( calculate(op1, op2, tokens[i]) );
} else
{
operand.push( string_to_int(tokens[i]) );
}
}

return operand.top();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode C++ postfix