美文网首页
227. Basic Calculator II 基本计算器 |

227. Basic Calculator II 基本计算器 |

作者: xingzai | 来源:发表于2019-05-10 20:19 被阅读0次

    题目链接
    tag:

    • Medium;

    question:
      Implement a basic calculator to evaluate a simple expression string.

    The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.

    Example 1:

    Input: "3+2*2"
    Output: 7

    Example 2:

    Input: " 3/2 "
    Output: 1

    Example 3:

    Input: " 3+5 / 2 "
    Output: 5

    Note:

    • You may assume that the given expression is always valid.
    • Do not use the eval built-in library function.

    思路:
      由于存在运算优先级,我们采取的措施是使用一个 stack 保存数字,如果该数字之前的符号是加或减,那么把当前数字压入栈中,注意如果是减号,则加入当前数字的相反数,因为减法相当于加上一个相反数。如果之前的符号是乘或除,那么从栈顶取出一个数字和当前数字进行乘或除的运算,再把结果压入栈中,那么完成一遍遍历后,所有的乘或除都运算完了,再把栈中所有的数字都加起来就是最终结果了。代码如下:

    class Solution {
    public:
        int calculate(string s) {
            long res = 0, num = 0;
            stack<int> st;
            char op = '+';
            for (int i=0; i<s.size(); ++i) {
                if (s[i] >= '0')
                    num = num*10 + s[i] - '0';
                if ((s[i] < '0' && s[i] != ' ') || (i == s.size()-1)) {
                    if (op == '+') st.push(num);
                    if (op == '-') st.push(-num);
                    if (op == '*') {
                        int tmp = st.top() * num;
                        st.pop();
                        st.push(tmp);
                    }
                    if (op == '/') {
                        int tmp = st.top() / num;
                        st.pop();
                        st.push(tmp);
                    }
                    op = s[i];
                    num = 0;
                }
            }
            while (!st.empty()) {
                res += st.top();
                st.pop();
            }
            return res;
        }
    };
    

    相关文章

      网友评论

          本文标题:227. Basic Calculator II 基本计算器 |

          本文链接:https://www.haomeiwen.com/subject/zrezoqtx.html