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();
        }
    };


  • 相关阅读:
    LeetCode 227. Basic Calculator II
    LeetCode 224. Basic Calculator
    LeetCode 103. Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 169. Majority Element
    LeetCode 145. Binary Tree Postorder Traversal
    LeetCode 94. Binary Tree Inorder Traversal
    LeetCode 144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7049935.html
Copyright © 2011-2022 走看看