Loading

【leetcode】224. Basic Calculator

Given a string s representing a valid expression, implement a basic calculator to evaluate it, and return the result of the evaluation.

Note: You are not allowed to use any built-in function which evaluates strings as mathematical expressions, such as eval().

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;
        
    }
};
posted @ 2021-12-27 20:19  aalanwyr  阅读(40)  评论(0编辑  收藏  举报