class Solution {
public:
    int calculate(string s) {
        stack<int> num;
        stack<char> symbol;
        for(int i=0;i<s.length();i++){
            if(s[i]==' ')   continue;
            else if(s[i]=='('||s[i]=='+'||s[i]=='-')  symbol.push(s[i]);
            else if(s[i]>='0'&&s[i]<='9'){
                for(int j=i+1;j<s.length();j++){
                    if(s[j]<'0'||s[j]>'9'){
                        num.push(stoi(s.substr(i,j-i)));
                        i=j-1;
                        break;
                    }
                       
                }
            }
            else if(s[i]==')'){
                stack<int> tem_i;
                stack<char> tem_c;
                while(symbol.top()!='('){
                    tem_i.push(num.top());
                    num.pop();
                    tem_c.push(symbol.top());
                    symbol.pop();
                }
                symbol.pop();
                while(!tem_c.empty()){
                    char c=tem_c.top();
                    tem_c.pop();
                    if(c=='+'){
                        int a=tem_i.top();
                        tem_i.pop();
                        int b=tem_i.top();
                        tem_i.pop();
                        tem_i.push(a+b);
                    }
                    if(c=='-'){
                        int a=tem_i.top();
                        tem_i.pop();
                        int b=tem_i.top();
                        tem_i.pop();
                        tem_i.push(a-b);
                    }
                }
                num.push(tem_i.top());
                tem_i.pop();
            }
        }
        stack<int> tem_i;
        stack<char> tem_c;
        while(!symbol.empty()){
            tem_i.push(num.top());
            num.pop();
            tem_c.push(symbol.top());
            symbol.pop();
        }
        while(!tem_c.empty()){
                    char c=tem_c.top();
                    tem_c.pop();
                    if(c=='+'){
                        int a=tem_i.top();
                        tem_i.pop();
                        int b=tem_i.top();
                        tem_i.pop();
                        tem_i.push(a+b);
                    }
                    if(c=='-'){
                        int a=tem_i.top();
                        tem_i.pop();
                        int b=tem_i.top();
                        tem_i.pop();
                        tem_i.push(a-b);
                    }
        }
        return tem_i.top();
    }
    int stoi(string s){
        int res=0;
        for(int i=0;i<s.length();i++){
            res=res*10+(s[i]-'0');
        }
        return res;
    }
};

LeetCode() Basic Calculator 不知道哪里错了的更多相关文章

  1. [LeetCode] Basic Calculator II 基本计算器之二

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  2. [LeetCode] Basic Calculator 基本计算器

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  3. LeetCode Basic Calculator II

    原题链接在这里:https://leetcode.com/problems/basic-calculator-ii/ Implement a basic calculator to evaluate ...

  4. LeetCode Basic Calculator

    原题链接在这里:https://leetcode.com/problems/basic-calculator/ Implement a basic calculator to evaluate a s ...

  5. [LeetCode] Basic Calculator III 基本计算器之三

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  6. [LeetCode] Basic Calculator IV 基本计算器之四

    Given an expression such as expression = "e + 8 - a + 5" and an evaluation map such as {&q ...

  7. [LeetCode] Basic Calculator & Basic Calculator II

    Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ...

  8. LeetCode——Basic Calculator II

    Description: Implement a basic calculator to evaluate a simple expression string. The expression str ...

  9. LeetCode——Basic Calculator

    Description: Implement a basic calculator to evaluate a simple expression string. The expression str ...

随机推荐

  1. Java基础之类的初始化顺序

    对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是 (静态变量.静态初始化块)>(变量.初始化块)>构造器 对于继承的情况: 1. 父类--静态变量    2. 父 ...

  2. Tomcat Shell脚本(启动|关闭|重启|状态)

    #!/bin/bash # # chkconfig: - # description: Tomcat start/stop/status script #Location of JAVA_HOME ( ...

  3. 使用Mulesoft建立webservice, simple方式,POJO

    Mulesoft是使用CXF来支持web service,有三种方式 1.JAX-WS 2.Simple, POJO 3. Proxy, pass-throught 本文介绍POJO,最简单的方式 1 ...

  4. 在gridControl的单元格中的多行文本

    我们知道,gridcontrol里面的单元格默认是不能换行的,但是有时候我们需要显示要换行的文本,应该怎么处理呢?这里提供一个方案: 假设我有一个列”合同文本“(colContractText),我要 ...

  5. 1、C#基础:变量、运算符、分支、循环、枚举、数组、方法 <转>

    转自:海盗船长 链接:http://www.cnblogs.com/baidawei/p/4701504.html#3241882 C#..Net以及IDE简介 一.什么是.Net? .Net指 .N ...

  6. jquery插件链接

    1.jquery版本 http://www.jq22.com/jquery-info122 2.jquery属性 http://www.runoob.com/jsref/prop-radio-valu ...

  7. jquery点赞和取消点赞插件

    <script> /* @author:Romey * 动态点赞 * 此效果包含css3,部分浏览器不兼容(如:IE10以下的版本) */ $(function(){ $("#p ...

  8. Gear VR开发

    下载安装Unity开发工具,要求Unity 5.3.0 或更高版本         下载Oculus签名,做Gear VR交互功能模块.关于输入交互,可以下载VR Samples(地址:https:/ ...

  9. 第六周——分析Linux内核创建一个新进程的过程

    "万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 &q ...

  10. System Sounds: Alerts and Sound Effects

    #include <AudioToolbox/AudioToolbox.h> #include <CoreFoundation/CoreFoundation.h> // Def ...