#include <cmath> #include <stack> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 给定一个后缀表达式,返回它的结果 * @param str string字符串 * @return long长整型 */ long long legalExp(string str) { // write code here stack<long long> zhan; vector<char> shuzu; long long shu = 0; for (char c : str) { if (c != '#' && c != '+' && c != '-' && c != '*') { shuzu.push_back(c); continue; } if (c == '#') { for (int i = 0; i < shuzu.size(); i++) { shu = shu * 10 + (shuzu[i] - '0'); } zhan.push(shu); shuzu.clear(); shu = 0; continue;; } if (c == '+' || c == '-' || c == '*') { if (zhan.size() < 2) continue;; long long houshu = zhan.top(); zhan.pop(); long long qianshu = zhan.top(); zhan.pop(); long long jieguo; switch (c) { case '+': jieguo = qianshu + houshu; break; case '-': jieguo = qianshu - houshu; break; case '*': jieguo = qianshu * houshu; break; } zhan.push(jieguo); } } if (zhan.empty()) { return 0; } return zhan.top(); } };