Question:
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
Solution:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
int len = tokens.size();
int stack[5000];
int top = -1;
int t1 = 0;
int t2 = 0;
for(int i = 0 ; i < len ; i++){
if(top >= 1){
t1 = stack[top];
t2 = stack[top-1];
}
switch(tokens[i][0]){
case '+':stack[--top] = t1+t2;break;
case '*':stack[--top] = t2*t1;break;
case '/':stack[--top] = t2/t1;break;
case '-':if(tokens[i].size()==1){
stack[--top] = t2-t1; break;
}
default: stack[++top] = atoi(tokens[i].c_str());
//stringstream ss;
// ss<<tokens[i];
// ss>>stack[++top];
}
}
return stack[0];
}
};
總結:
1、後綴表達式求值,典型的棧應用。相應的還有中綴表達式轉換後綴表達式
:使用兩個棧,一個存儲運算符號,一個存儲數字,運算符棧一直要保證棧頂運算符號優先級最大。
2、stringstream最是耗時beat 8%,16ms
改用atoi beat 72%,9ms。效率相差一倍