程式語言 - LeetCode - C++ - 227. Basic Calculator II



題目:


方法:

stack統一做加總的動作,所有"+、-、*、/"都預先處理

解答:

class Solution {
public:
    int calculate(string s) {
        int num = 0;
        char op = '+';
        stack<int> st;

        for (int i = 0; i < s.size(); ++i) {
            char ch = s[i];

            if (isdigit(ch)) {
                num = num * 10 + (ch - '0');
            }

            if ((!isdigit(ch) && ch != ' ') || (i == s.size() - 1)) {
                if (op == '+') {
                    st.push(num);
                }
                else if (op == '-') {
                    st.push(-num);
                }
                else if (op == '*') {
                    int v = st.top(); st.pop();

                    st.push(v * num);
                }
                else if (op == '/') {
                    int v = st.top(); st.pop();

                    st.push(v / num);
                }

                op = ch;
                num = 0;
            }
        }

        int ans = 0;
        while (!st.empty()) {
            ans += st.top();
            st.pop();
        }

        return ans;
    }
};