题目描述
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
最初代码:
1. 最初没好好看题,没注意里面的数字可能是整数也可能是表达式,思考简单了。一直说越界或者其他。一直想为什么用string,不是char,原来会有表达式。真的很菜..
2. 理解之后就可以写了
int evalRPN(vector<string> &tokens) {
stack<int> numbers;
int n = tokens.size();
if(n == 0) return 0;
for(int i = 0; i < tokens.size(); i++){
if(tokens[i] >= "0" && tokens[i] <= "9"){
numbers.push(stoi(tokens[i]));
}else{
int b = numbers.top();
numbers.pop();
int a = numbers.top();
numbers.pop();
int result = 0;
if(tokens[i] == "+")
result = a + b;
else if(tokens[i] == "-")
result = a - b;
else if(tokens[i] == "*")
result = a * b;
else if(tokens[i] == "/")
result = a / b;
numbers.push(result);
}
}
return numbers.top();
}
AC代码:
class Solution {
public:
int evalRPN(vector<string> &tokens) {
stack<int> numbers;
int n = tokens.size();
if(n == 0) return 0;
for(auto x : tokens){
if(x == "+" || x == "-" || x == "*" || x == "/"){
if(numbers.size() < 2) return 0;
int b = numbers.top();numbers.pop();
int a = numbers.top();numbers.pop();
if(x == "+") numbers.push(a+b);
if(x == "-") numbers.push(a-b);
if(x == "*") numbers.push(a*b);
if(x == "/") numbers.push(a/b);
}else{
numbers.push(atoi(x.c_str()));
}
}
return numbers.top();
}
};