LeetCode 150. Evaluate Reverse Polish Notation

后缀表达式。

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)