LeetCode[150] 逆波兰表达式求值
原题链接:https://leetcode.cn/problems/maximum-subarray/description/
- 慎用自增/自减符号,不要偷懒,写两行代码更为保险
以下两段代码的效果是不一样的
num[p - 1] *= num[p--];
num[p - 1] *= num[p];
p--;
- 数据范围会爆int,换成long long
AC代码:
class Solution {
public:
long long num[10010];
int p = 0;
int evalRPN(vector<string> &tokens)
{
for (auto ch : tokens)
{
printf("%s ", ch.c_str());
if (ch == "+")
{
num[p - 1] += num[p];
p--;
}
else if (ch == "-")
{
num[p - 1] -= num[p];
p--;
}
else if (ch == "*")
{
// printf("%d %d\n", num[p], num[p - 1]);
// printf("%d * %d = %d\n", num[p-1], num[p], num[p - 1] * num[p]);
num[p - 1] *= num[p];
p--;
}
else if (ch == "/")
{
num[p - 1] /= num[p];
p--;
}
else
{
num[++p] = atoi(ch.c_str());
}
for (int i = 1; i <= 5; i ++)
{
printf("%d ", num[i]);
}
puts("");
}
return num[1];
}
};