# 227 - Basic Calculator II

解法一 - Stack

這題的關鍵就是要用 stack,另外因為第一個數一定要放進 stack,所以一開始會把 sign 設成 '+'。

class Solution {
public:
    int calculate(string s) {
        int len = s.length();
        if(len == 0) { 
            return 0;
        }

        stack<int> st;
        int num = 0;
        char sign = '+';
        for(int i = 0; i < len; ++i) {
            if(isdigit(s[i])) {
                num = num * 10 + (s[i] - '0');
            }

            if( (!isdigit(s[i]) && s[i] != ' ') || i == len - 1) {
                if(sign == '+') { st.push(num); }
                else if(sign == '-') { st.push(-num); }
                else if(sign == '*') { 
                    int tmp = st.top() * num; 
                    st.pop();
                    st.push(tmp);
                }
                else if(sign == '/') {
                    int tmp = st.top() / num; 
                    st.pop();
                    st.push(tmp);
                }

                sign = s[i];
                num = 0;
            }
        }

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

        return res;
    }
};

Last updated