题目不难,字符串转换成整数的时候不知道有现成的函数,手动转换浪费了点时间。
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> s;//栈实现计算操作
int ans = 0;//返回值
int opLeft = 0, opRight = 0;//碰到操作符时的左右操作数
for (int i = 0; i < (int)tokens.size(); i++)
{
if (tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/")//碰到数字时先将字符串转成数字,然后入栈
{
int temp = 0;
int pointer = 1;
if (tokens[i][0] == '-')//如果
{
for (int j = tokens[i].size() - 1; j >= 1; j--)
{
temp -= ((int)tokens[i][j] - 48) * pointer;
pointer *= 10;
}
s.push(temp);
}
else
{
for (int j = tokens[i].size() - 1; j >= 0; j--)
{
temp += ((int)tokens[i][j] - 48) * pointer;
pointer *= 10;
}
s.push(temp);
}
}
else//碰到操作符时,出栈一个数为右操作数,再出栈一个为左操作数
{
int temp = 0;
if (s.size() >= 2)
{
opRight = s.top();
s.pop();
opLeft = s.top();
s.pop();
switch (tokens[i][0])
{
case'+':
temp = opLeft + opRight;
s.push(temp);
break;
case'-':
temp = opLeft - opRight;
s.push(temp);
break;
case'*':
temp = opLeft * opRight;
s.push(temp);
break;
case'/':
temp = opLeft / opRight;
s.push(temp);
default:
break;
}
}
else
return 0;
}
}
ans = s.top();
return ans;
}
};