zoukankan      html  css  js  c++  java
  • Basic Calculator II

        该题和前面的"

    Basic Calculator

    "的处理方法一样,仅仅是增加了对"*"、"/"两种运算的支持。

    class Solution {
    public:
        bool isnum(char c){
            if(c >= '0' && c <= '9')
                return true;
            return false;
        }
        int calculate(string s) {        
            vector<string> postorder;
            stack<char> ccache;
            stack<int> icache;
            string tmp;
            if(s.length() < 1)
                return 0;
    //构造后缀表达式
            for(int i = 0; i < s.length(); ){
                if(s[i] == ' '){
                    i++;
                    continue;
                }
                if(!isnum(s[i])){
                    if(s[i] == '(' || ccache.empty()){
                        ccache.push(s[i]);
                        i++;
                        continue;
                    }
                    if(s[i] == ')'){
                        while(ccache.top() != '('){
                            tmp = "";
                            tmp += ccache.top();
                            postorder.push_back(tmp);
                            ccache.pop();
                        }
                        ccache.pop();
                        i++;
                        continue;
                    }
                    if(s[i] == '+' || s[i] == '-'){
                        while(!ccache.empty() && ccache.top() != '(' ){
                            tmp = "";
                            tmp += ccache.top();
                            postorder.push_back(tmp);
                            ccache.pop();
                        }
                        ccache.push(s[i]);
                        i++;
                        continue;
                    }
                    if(s[i] == '*' || s[i] == '/'){
                        while(!ccache.empty() && ccache.top() != '(' && ccache.top() != '+' && ccache.top() != '-'){
                            tmp = "";
                            tmp += ccache.top();
                            postorder.push_back(tmp);
                            ccache.pop();
                        }
                        ccache.push(s[i]);
                        i++;
                        continue;
                    }
                }else{
                    int j = i;
                    while(j < s.length() && isnum(s[j]))
                        j++;
                    tmp = "";
                    tmp = s.substr(i, j - i);
                    postorder.push_back(tmp);
                    i = j;
                }
            }
    //加入全部剩余的元素
            while(!ccache.empty()){
                tmp = "";
                tmp += ccache.top();
                ccache.pop();
                postorder.push_back(tmp);
            }
    //通过后缀表达式计算结果值
                int fir, sec, result;
                for(int i = 0; i < postorder.size(); i++){
                    if(postorder[i] == "+" || postorder[i] == "-" || postorder[i] == "*" || postorder[i] == "/"){
                        sec = icache.top();
                        icache.pop();
                        fir = icache.top();
                        icache.pop();
                        
                        if(postorder[i] == "+")
                            result = fir + sec;
                        if(postorder[i] == "-")
                            result = fir - sec;
                        if(postorder[i] == "*")
                            result = fir * sec;
                        if(postorder[i] == "/")
                            result = fir / sec;
                        
                        icache.push(result);
                    }else{
                        icache.push(atoi(postorder[i].c_str()));
                    }
                }
                return icache.top();
        }
    };


  • 相关阅读:
    微博Feed流
    朋友圈
    Go命令行—compile
    Practical Go: Real world advice for writing maintainable Go programs
    Nginx Cache-Control
    Redis 主从复制
    JAVA
    Tomcat
    Tomcat
    CentOS 7
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7049935.html
Copyright © 2011-2022 走看看