考察知识点: 栈、后缀表达式
后缀表达式没有括号,每个运算符都严格按照它出现的顺序进行运算,避免了运算顺序上的歧义。
题目分析:
对于每一个token,首先看它是否是数字。如果是数字,则先将该token转化为数字,之后将该数字放入栈中。如果是操作符,则需要从栈中弹出两个数进行运算。注意先弹出的数因为是后放进去的,所以在计算减法和除法时要注意两个数的位置,先放入的数在运算符的左边,后放入的在右边。在计算出结果后需要再将结果放入栈内。
所用编程语言: C++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param tokens string字符串vector
* @return int整型
*/
int calculatePostfix(vector<string>& tokens) {
// write code here
int size = tokens.size();
stack<int> nums;
for (int i = 0; i < size; i++) {
string token = tokens[i];
if (isdigit(token[token.size() - 1])) {
int num = 0;
bool neg = false;
int start = 0;
int size = token.size();
if (token[0] == '-') {
neg = true;
start = 1;
}
for (;start < size; start++) {
num = num * 10 + token[start] - '0';
}
if (neg) num = 0 - num;
nums.push(num);
} else {
int b = nums.top(); nums.pop();
int a = nums.top(); nums.pop();
char op = token[0];
if (op == '+') nums.push(a + b);
else if (op == '-') nums.push(a - b);
else if (op == '*') nums.push(a * b);
else if (op == '/') nums.push(a / b);
}
}
return nums.top();
}
};

京公网安备 11010502036488号