LeetCode[150] 逆波兰表达式求值

原题链接:https://leetcode.cn/problems/maximum-subarray/description/

  1. 慎用自增/自减符号,不要偷懒,写两行代码更为保险
    以下两段代码的效果是不一样的
num[p - 1] *= num[p--];
num[p - 1] *= num[p];
p--;
  1. 数据范围会爆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];
    }
};
posted @ 2022-11-21 22:45  星星亮了欸  阅读(27)  评论(0编辑  收藏  举报