力扣 224.基本计算器

力扣 224.基本计算器_第1张图片
前几天参考评论区的答案,今天来自己实现一下:

class Solution {
public:
    int calculate(string s) {
        int res=0;
        int sig=1;//+、-符号 1为+
        stack<int> temp;//临时存储 左边部分的结果和符号
        int i=0;
        while(i<s.size()){
            if(s[i]-'0'>=0 && s[i]-'9'<=0){//数字情况
                int cur=s[i]-'0';
                while(i+1<s.size() && s[i+1]-'0'>=0 && s[i+1]-'9'<=0){
                    int t=s[++i]-'0';//不能写一起,否则有溢出可能
                    cur=cur*10 +t;//组装成对应的整数
                }
                res+=sig*cur;
            }
            else if(s[i]=='-')
                sig=-1;
            else if(s[i]=='+')
                sig=1;
            else if(s[i]=='('){//左括号
                temp.push(res);//前面已计算的结果入栈
                temp.push(sig);//+、-号入栈
                res=0;//结果清零,先用来计算括号内的
                sig=1;//+、-也一样
            }
            else if(s[i]==')'){//有右括号
                sig=temp.top();temp.pop();//恢复之前的+、-号
                res=temp.top()+sig*res;//更新结果
                temp.pop();
            }
            i++;
        }
        return res;
    }
};

力扣 224.基本计算器_第2张图片

你可能感兴趣的:(力扣,leetcode,算法,职场和发展)