zoukankan      html  css  js  c++  java
  • leetcode227 基本计算器

    1先利用符号栈转化为逆波兰表达式,并添加‘,’作为一个数字的结尾;

    2然后利用数字栈计算逆波兰表达式的值;

    class Solution {
    public:
        int calculate(string s_mid) {
            unordered_map<char,int> m={{'+',1},{'-',1},{'*',2},{'/',2}};
            stack<char> s;
            string s_re;
            
            //转逆波兰表达式
            for(int i=0;i<s_mid.size();i++){
                char c=s_mid[i];
                if(c==' ') continue; 
                if(c<='9' && c>='0'){
                    while(i<s_mid.size() && s_mid[i]<='9'&&s_mid[i]>='0'){
                        c=s_mid[i];
                        s_re.push_back(c);
                        i++;
                    }
                    s_re.push_back(',');
                    i--;
                    continue;
                }
                if(s.empty()){
                    s.push(c);
                }else{
                    while(!s.empty() && m[s.top()]>=m[c]){
                        s_re.push_back(s.top());
                        s.pop();
                    }
                    s.push(c);
                }
            }
            while(!s.empty()){
                s_re.push_back(s.top());
                s.pop();
            }
            
            //cout<<s_re<<endl;//输出逆波兰表达式
            //逆波兰表达式求值;
            stack<int> res;
            for(int i=0;i<s_re.size();i++){
                char c=s_re[i];
                if(c==' ') continue;
                if(c<='9' && c>='0'){
                    int num=0;
                    while(i<s_re.size() && s_re[i]!=','){
                        c=s_re[i];
                        num=num*10+(c-'0');
                        i++;
                    }
                    res.push(num);
                    continue;
                }
                
                int a,b,sum=0;
                b=res.top();res.pop();
                a=res.top();res.pop();
                if(c=='+') 
                    sum=a+b;
                else if(c=='-')
                    sum=a-b;
                else if(c=='*')
                    sum=a*b;
                else if(c=='/')
                    sum=a/b;
                res.push(sum);
            }
            return res.top();
        }
    };
  • 相关阅读:
    log4net 配置
    Sublime Text 2 安装Package Control和插件的两种方法
    Silverlight中ListBox的数据绑定
    在Silverlight 5 项目中创建单元测试项目
    const V.S readonly
    鼠标和键盘操作的全局钩子库
    数码管图片
    正则表达式
    ToString的格式化字符串
    C# Builder
  • 原文地址:https://www.cnblogs.com/joelwang/p/11013256.html
Copyright © 2011-2022 走看看