题目:
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, /
. Each operand may be an integer or another expression.
数学表达式的 逆式波兰记法。
答案:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> cache;
for(int i = 0; i < tokens.size(); i++){
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="/"||tokens[i]=="*"){
int num1 = cache.top();
cache.pop();
int num2 = cache.top();
cache.pop();
cache.push(caculate(num1,num2,tokens[i]));
}
else{
cache.push(std::atoi(tokens[i].c_str()));
}
}
int num = cache.top();
return num;
}
int caculate(int n1,int n2,string op){
if(op == "+")
return n1 + n2;
if(op == "-")
return n2 - n1;
if(op == "*")
return n1 * n2;
if(op == "/")
return n2 / n1;
}
};
说明:
1. c++的STL很强大,类似stack,list,map等都有集成。
2.C++string转int:很好用的方法:std::atoi(str.c_str());
3.int转string:
char * itoa ( int value, char * str, int base );
注意返回的是char类型。base是其转换的进制,如 二进制,八进制,十进制。