作者: 
sixB (6B)   
2024-08-03 04:24:24224.
小計算機parser
學康拍樂做的小作業都比這個複雜==
以前的hard真的都很純
意思到了
原本想說用stack
進進又退退的感覺不是很爽
後來想說建樹
全部都擺起來怕太大
沒有要選市長不用這種建樹吧
用同一套邏輯記state
邊走邊算 好像又有點像stack了
樹位邏輯
using ll = long long;
class Solution {
public:
    int calculate(string s) {
        ll res = 0;
        stack<pair<ll, bool>> st;
        bool type = 1; // false:'-', true:'+'
        //<value, type>
        ll cur = 0;
        for(char c: s){
            if(c == ' ') continue;
            if(c == '(') {
                st.push({res, type});
                res = 0;
                type = true;
            }
            else if(c == ')') {
                cal(res, type, cur);
                cur = res;
                res = st.top().first;
                type = st.top().second;
                cal(res, type, cur);
                st.pop();
            }
            else{
                if(c == '-'){
                    cal(res, type, cur);
                    type = false;
                }
                else if(c == '+'){
                    cal(res, type, cur);
                    type = true;
                }
                else{
                    //digits
                    cur *= 10;
                    cur += (c - '0');
                }
            }
        }
        cal(res, type, cur);
        return (int)res;
    }
    void cal(ll& res, bool& type, ll& cur){
        if(type) res += cur;
        else res -= cur;
        type = true;
        cur = 0;
        //cout << res << '\n';
    }
};