首页 > 其他 > 详细

LeetCode 224. Basic Calculator

时间:2019-07-31 16:30:18      阅读:90      评论:0      收藏:0      [点我收藏+]

Basic Calculator

由于只需要实现加减和括号,除了括号不需要考虑运算的优先级,所以可以直接one pass做。

思路是将 a-b 等价为 a+(-b),这样所有的运算都是加法,而负号只要乘以后面的数即可。

建立一个stack,遇到左括号时,压栈迄今为止的和以及括号前的符号。遇到对应右括号时,括号内已经计算完毕,这时我们将括号内计算得到的sum*栈顶的符号,再加上栈内前面部分的和即可。

class Solution {
public:
    int calculate(string s) {
        // a-b <=> a+(-b)
        int res=0, sign=1;
        stack<int> st;
        
        for (int i=0;i<s.size();++i){
            char ch=s[i];
            if (isdigit(ch)){
                int num=0;
                while (i<s.size() && isdigit(s[i])){
                    num = num*10 + (s[i++]-0);
                }
                --i;
                res += sign*num;
            }else if (ch==+ || ch==-){
                sign = ch==+?1:-1;
            }else if (ch==(){
                st.push(res);
                st.push(sign);
                res = 0;
                sign = 1;
            }else if (ch==)){
                res *= st.top(); st.pop();
                res += st.top(); st.pop();
            }
        }
        return res;
    }
};

 

LeetCode 224. Basic Calculator

原文:https://www.cnblogs.com/hankunyan/p/11276993.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!