227. Basic Calculator II的C++解法
阿新 • • 發佈:2018-12-20
比起Ⅰ來,Ⅱ多了乘除法,少了括號。我們還是以每一個數字為單位,'+'和 '-' 都看作數字的正負,將數字壓棧。'*'和'/'時先將符號記錄下來,讀出下一個數字時直接從棧頂彈出最近的運算元進行運算,然後將結果壓棧。
class Solution { public: int calculate(string s) { set<char> numbers = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; stack<int> ns; int res=0; int index = 0; char op='+'; if (!s.empty()) { while ((index = s.find(' ', index)) != string::npos) s.erase(index, 1); } int i=0; int cal=0; while (i<s.length()) { if (numbers.count(s[i]) != 0) { cal = s[i] - 48; while (numbers.count(s[i + 1]) != 0) { cal = cal * 10 + s[i + 1] - 48; i++; } if (op=='+') ns.push(cal); else if (op=='-') ns.push(-1*cal); else if (op=='*'){int a=ns.top(); ns.pop(); ns.push(a*cal);} else if (op=='/'){int a=ns.top(); ns.pop(); ns.push(a/cal);} } else if (s[i]=='-') op='-'; else if (s[i]=='+') op='+'; else if (s[i]=='*') op='*'; else if (s[i]=='/') op='/'; i++; } while (!ns.empty()) { res=res+ns.top(); ns.pop(); } return res; } };