题目描述
题目分析
常规题,遇到数字入栈,遇到符号出栈,出栈的时候注意计算顺序。
代码实现
在这里注意将字符转换成数字时,如果为‘0’-‘9’内的字符,可以通过减去‘0’获得对应的数字大小。如果不为一位数,可通过遍历字符串,每获取一个字符后,在获取下一个字符前,将其升高一位后再相加即可。(如果不想自己写方法,也可以用C++自带的stoi()或atoi()方法实现)
class Solution {
public:
int str2num(string &str){
int res = 0,i = 0;
bool control = true;
if(str[0] == '-'){ i = 1; control = false;}
while(i < str.size()){
res = res*10 + str[i]-'0';
i++;
}
return control?res:-res;
}
int evalRPN(vector<string>& tokens) {
int temp;
stack<int> numStack;
for(auto& t : tokens){
if(t != "+" && t != "-" && t != "*" && t != "/"){
numStack.push(str2num(t));
}else{
temp = numStack.top(); numStack.pop();
if(t == "+") temp = numStack.top() + temp;
else if(t == "-") temp = numStack.top() - temp;
else if(t == "*") temp = numStack.top() * temp;
else if(t == "/") temp = numStack.top() / temp;
numStack.pop(); numStack.push(temp);
}
}
return numStack.top();
}
};
参考文章: