227. 基本计算器 II
1 class Solution 2 { 3 public: 4 int calculate(string s) 5 { 6 s += "+";//1、最后一位加一个"+" 7 if (s.empty()) return 0; 8 stack<int> vals; 9 stack<char> ops; 10 long long val = 0; 11 for (auto c : s) 12 { 13 if (c == ' ') continue; 14 else if (isdigit(c)) val = 10 * val + c - '0'; 15 else 16 { 17 vals.push(val); 18 val = 0; 19 //这里只计算*/ 20 if (!ops.empty() && (ops.top() == '*' || ops.top() == '/')) 21 { 22 int v1 = vals.top();vals.pop(); 23 int v2 = vals.top();vals.pop(); 24 char op = ops.top();ops.pop(); 25 int v = (op == '*') ? (v2 * v1) : (v2 / v1); 26 vals.push(v); 27 } 28 ops.push(c); 29 } 30 } 31 32 vals.push(val);//2、数据栈加一个0 33 int res = 0; 34 while (!ops.empty()) //3、看符号栈 35 { 36 int sign = ops.top() == '-' ? -1 : 1; ops.pop(); 37 int v = vals.top(); vals.pop(); 38 res += sign * v; 39 } 40 if (!vals.empty()) res += vals.top();//4、数据栈应该比符号栈多1,因此加上栈顶 41 return res; 42 } 43 };
Mamba never out

浙公网安备 33010602011771号