考察知识点: 栈、后缀表达式
后缀表达式没有括号,每个运算符都严格按照它出现的顺序
进行运算,避免了运算顺序上的歧义。
题目分析:
对于每一个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(); } };