224.
小计算机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';
}
};