227. Basic Calculator II

来源:互联网 发布:惊天危机 知乎 编辑:程序博客网 时间:2024/06/07 02:36

这道题给出的表达式没有了括号,改成了加减乘除,所以要考虑优先级的问题。

思路是遇到乘除就在栈中弹出一个数来运算,运算完了压栈。碰到加减就压栈,注意遇到减的时候压的是相反数。

还是像上一个题一样定义一个全局的符号表示上一个遇到的符号是什么。

class Solution {public:    int calculate(string s) {        int res = 0, n = s.size();        char sign = '+';        stack<int> stk;        for(int i = 0; i < n; ++i){            char c = s[i];            if(c == ' ')    continue;            else if(c >= '0'){                int num = 0;                while(i < n && s[i] >= '0'){                    num = 10 * num + s[i] - '0';                    i++;                }                //cout << num << endl;                i--;                if(sign == '+') stk.push(num);                else if(sign == '-')    stk.push(-num);                else if(sign == '*'){                    int tmp = num * stk.top();stk.pop();                    stk.push(tmp);                }else if(sign == '/'){                    int tmp = stk.top() / num; stk.pop();                    stk.push(tmp);                }            }else{                sign = c;            }        }        while(!stk.empty()){            //cout << stk.top() << endl;            res += stk.top();stk.pop();        }        return res;    }};



原创粉丝点击