逆波兰表达式求值
逆波兰表达式又称后缀表达式。简单的说就是中缀表达式中的操作符写在两个操作数的后面。 例如:1+2 => 1 2 +
主要思路:遇到操作数就进行入栈操作,遇到操作符就进行出栈操作(依次弹出栈中的两个元素),将弹出元素进行计算,计算的结果重新入栈,最后栈中的数据就是答案。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param tokens string字符串vector
* @return int整型
*/
int evalRPN(vector<string>& tokens) {
stack<int> sk;
for (vector<string>::iterator it = tokens.begin(); it != tokens.end(); it++) {
if (isOps(*it)) {
int val1 = sk.top();
sk.pop();
int val2 = sk.top();
sk.pop();
int value = calculate(val2, val1, *it);
sk.push(value);
} else {
sk.push(stoi(*it));
}
}
return sk.top();
}
bool isOps(string str) {
if (str == "+" || str == "-" || str == "*" || str == "/") {
return 1;
} else {
return 0;
}
}
int calculate(int v1,int v2,string ops){
int res=0;
if(ops=="+"){
res=v1+v2;
}else if(ops=="-"){
res=v1-v2;
}else if(ops=="*"){
res=v1*v2;
}else if(ops=="/"){
res=v1/v2;
}
return res;
}
};