zoukankan      html  css  js  c++  java
  • Leetcode每日一题 224.基本计算器

    昨天刚到剑指offer里面看到这道题,今天每日一题刚好就是它...

    实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。

    示例 1:
    
    输入:s = "1 + 1"
    输出:2
    示例 2:
    
    输入:s = " 2-1 + 2 "
    输出:3
    示例 3:
    
    输入:s = "(1+(4+5+2)-3)+(6+8)"
    输出:23

    以前写过类似的判断括号的问题,想不起来是哪一道了..反正上次是被虐了,不过这次一下就想出来了,我们要思考的第一步是,如何判断最简单的式子,比如"1+1"或者"1+2-3+4-5"类似这种,万能的栈又来了,就不多说了,因为题目里只有加减法,然后加上括号,不过括号还是很好处理的,不用想太复杂,因为括号的最里面绝对是基础式子,回到了简单的"1+1",所以我们只需要用一个递归结构就行了,遇到“(”进入递归,遇到“)”跳出递归,返回一个值,就是括号的和,最后的最后就会变成基础式。

    class Solution {
    public:
        inline bool isdigit(char c)
        {
            return c>='0'&&c<='9';
        }
    public:
        string s;
        int i;
        int s_size;
        int dfs(){
            stack<int> num;
            char sign = '+';
            long long sum = 0;
            
            while(i < s_size)
            {
                char c = s[i++];
                if(isdigit(c))
                    sum = sum*10 + (c - '0');
    
                if(c == '(')
                    sum = dfs();
    
                if((!isdigit(c)&&c!=' ')||i>=s_size)
                {
                    switch(sign){
                        case '+':num.push(sum);break;
                        case '-':num.push(-sum);break;
                    }
                    sign = c;
                    sum = 0;
                }
    
                if(c == ')')
                    break;
            }
            
            long long res = 0;
            while(!num.empty())
            {
                res+=num.top();
                num.pop();
            }
            return res;
        }
        int calculate(string s) {
            this->i = 0;
            this->s = s;
            this->s_size = s.size();
    
            return dfs(); 
        }
    };
  • 相关阅读:
    2016第50周五
    2016第50周四
    2016第50周三
    2016第50周二
    2016第50周一
    2016第49周日
    软件架构、框架、模式、模块、组件、插件概念汇总
    2016第49周五
    2016第49周四
    从服务器上共享文件上下载文件或上传文件
  • 原文地址:https://www.cnblogs.com/xiangqi/p/14514161.html
Copyright © 2011-2022 走看看