leetcode Evaluate Reverse Polish Notation

题目连接

https://leetcode.com/problems/evaluate-reverse-polish-notation/  

Evaluate Reverse Polish Notation

Description

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:
	inline bool is_digit(char ch) {
		return ch >= '0' && ch <= '9';
	}
	int evalRPN(vector<string>& tokens) {
		stack<int> A;
		int a, b;
		size_t n = tokens.size();
		for (size_t i = 0; i < n; i++) {
			int v = 0;
			if (is_digit(tokens[i][0]) || tokens[i].length() > 1) {
				bool f = tokens[i][0] == '-';
				size_t j, k = tokens[i].size();
				for (j = f ? 1 : 0; j < k; j++) v = v * 10 + tokens[i][j] - '0';
				A.push(f ? -v : v);
			} else {
				char &ch = tokens[i][0];
				a = A.top(); A.pop();
				b = A.top(); A.pop();
				switch (ch) {
					case '+':
						A.push(a + b);
						break;
					case '-':
						A.push(b - a);
						break;
					case '*':
						A.push(a * b);
						break;
					case '/':
						A.push(b / a);
						break;
				}
			}
		}
		return A.top();
	}
};
原文地址:https://www.cnblogs.com/GadyPu/p/5034051.html