美文网首页
Leetcode-224-Basic Calculator

Leetcode-224-Basic Calculator

作者: 单调不减 | 来源:发表于2019-05-30 10:52 被阅读0次

表达式计算的题目考研的时候做过很多了,更复杂的也见过,比如包含负数和乘除的,其实思路都是利用操作栈和操作数栈来记录计算顺序,最终得到结果。

class Solution {
public:
    int calculate(string s) 
    {
        stack<char> ops;
        stack<int> nums;
        int curnum = 0;

        for(int i=0;i<s.size();++i) 
        {
            char c=s[i];
            #跳过空格
            if(c==' ') continue;
            #'+'/'-'/'('直接入栈
            if(c=='('||c=='+'||c=='-'){ops.push(c);continue;}
            #')'来时栈顶只有'('所以弹出
            if (c==')') ops.pop(); 
            #计算好几个数字连在一起的数值
            else if(isdigit(c)) 
            {
                curnum=curnum*10+(c-'0');
                if(i+1<s.size()&&isdigit(s[i+1])) continue;
                nums.push(curnum);
                curnum=0;
            }
            #若操作符栈空或栈顶元素为'('说明数字栈为空或左操作数,先不做计算
            if (ops.empty()||ops.top()=='(') continue;
            #否则可以进行计算
            int n2=nums.top();nums.pop();                
            if (ops.top()=='+') nums.top()+=n2;
            else if(ops.top()=='-')nums.top()-=n2;
            ops.pop();
        }
        return nums.top();
    }
};

相关文章

网友评论

      本文标题:Leetcode-224-Basic Calculator

      本文链接:https://www.haomeiwen.com/subject/bjdmtctx.html