【leetcode】224. Basic Calculator
阿新 • • 發佈:2021-12-27
Given a string
s
representing a valid expression, implement a basic calculator to evaluate it, and returnthe result of the evaluation.
Note:You arenotallowed to use any built-in function which evaluates strings as mathematical expressions, such aseval()
.
Example 1:
Input: s = "1 + 1"
Output: 2
Example 2:
Input: s = " 2-1 + 2 " Output: 3
Example 3:
Input: s = "(1+(4+5+2)-3)+(6+8)"
Output: 23
class Solution { public: int calculate(string s) { //return (int) eval(s); 靜態語言沒有eval這種函式 // 因為 只有加減符號 而且都有效 括號直接差 沒有優先順序的差別吧 基本思路是對的 為啥寫著寫著 迷了 int res=0,sign=1,n=s.size(); stack<int> st; for(int i=0;i<n;++i) { char c=s[i]; if(c>='0') { int num=0; while(i<n &&s[i]>='0') { num=num*10+(s[i++]-'0'); } res+=sign*num; --i; } else if(c=='+') { sign=1; } else if(c=='-') { sign=-1; } else if(c=='(') { st.push(res); st.push(sign); res=0; sign=1; } else if(c==')') { res*=st.top();st.pop(); res+=st.top();st.pop(); } } return res; } };