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. 用jQuery Mobile做HTML5移动应用的三个优缺点

    JQuery Mobile 和 HTML5 的 3个优点 1. 上手迅速并支持快速迭代:在一个星期多一点的时间里,通过阅读JQuery Mobile文档以及O’Reilly出版的JQuery Mobi ...

  2. 对于.NET Socket连接的细节记录

    如果客户端直接连接一个不存在的服务器端,客户端会抛出异常: 如果在连接过程中,客户端强制关闭了连接(没有调用Close直接关闭了程序),服务器端会抛出异常: 如果在连接过程中,客户端调用了Close, ...

  3. 改变系统自带UITableViewCell的imageView的大小

    CGSize itemSize = CGSizeMake(, ); UIGraphicsBeginImageContextWithOptions(itemSize, NO,0.0); CGRect i ...

  4. AngularJs项目实践总结

    今年3月接触AngularJs,并且在6月的项目中开始应用,从踩坑到填坑花了不少时间,根据项目中的实际应用情况总结了一些经验,如下: 一.UI控件选择 Angularjs是不缺控件的,Github里现 ...

  5. AngularJs的UI组件ui-Bootstrap分享(六)——Tabs

    tabs控件使用uib-tabset指令和uib-tab指令,效果是这样的: <!DOCTYPE html> <html ng-app="ui.bootstrap.demo ...

  6. TestNG插件的安装问题

    一.可以采用离线安装的方式 离线安装若不成功,可以删除之前的eclipse,然后在新下载eclipse中添加离线安装包 1.离线安装方法: 发现很多同学和我一样无法在线安装testNg,现在分享一个离 ...

  7. adb catlog>d:\log.txt日志级别

    W,警告 I,通知 D,调试 E,错误 V, 到最细的日志 功能测试可以看W和E,性能测试I比较有用

  8. java 调用 sql server存储过程

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  9. strlen 字符型数组和字符数组 sizeof和strlen的区别 cin.get(input,Arsize)

    strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值 ...

  10. Spring面向切面之AOP深入探讨

    Spring之AOP深入探讨 刚接触AOP之前我已经找了网上各种博客论坛上的关于AOP的文章利于我理解因为听好多人说AOP很复杂,很深奥当我接触之后发现根本不是那么的难于理解.它只是一个基于OOP技术 ...