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 };

 

posted @ 2020-04-12 11:35  Jinxiaobo0509  阅读(131)  评论(0)    收藏  举报