leetcode227 基本计算器

1先利用符号栈转化为逆波兰表达式,并添加‘,’作为一个数字的结尾;
2然后利用数字栈计算逆波兰表达式的值;
class Solution {
public:
    int calculate(string s_mid) {
        unordered_map<char,int> m={{'+',},{'-',},{'*',},{'/',}};
        stack<char> s;
        string s_re;
        //转逆波兰表达式
        for(int i=;i<s_mid.size();i++){
            char c=s_mid[i];
            if(c==' ') continue;
            if(c<='' && c>=''){
                while(i<s_mid.size() && s_mid[i]<=''&&s_mid[i]>=''){
                    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=;i<s_re.size();i++){
            char c=s_re[i];
            if(c==' ') continue;
            if(c<='' && c>=''){
                int num=;
                while(i<s_re.size() && s_re[i]!=','){
                    c=s_re[i];
                    num=num*+(c-'');
                    i++;
                }
                res.push(num);
                continue;
            }
            int a,b,sum=;
            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();
    }
};
leetcode227 基本计算器的更多相关文章
- [Swift]LeetCode227. 基本计算器 II | Basic Calculator II
		
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
 - LeetCode227:基本计算器II
		
感觉自己的思路还不错,比较简单清晰,代码量也比较少,没有用到记录运算符的变量或栈,就想把这个思路发一下博客. 题目: 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数 ...
 - LeetCode 227. 基本计算器 II(Basic Calculator II)
		
227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...
 - 1.C#WinForm基础制作简单计算器
		
利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...
 - 自己动手写计算器v1.1
		
这个改动主要是使用工厂模式替代了简单工厂模式,这样做的好处是如果以后我们要扩充其他运算时,就不用总是去修改工厂类, 这是可以采取工厂模式,主要是将原来简单工厂类的逻辑判断分离出来,将它作为一个借口,与 ...
 - 自己动手写计算器v1.0
		
今天突发奇想,想着看了还几个设计模式了,倒不如写点东西来实践它们.发现计算器这种就比较合适,打算随着设计模式的学习,会对计算器不断的做改进. 包括功能的增加和算法的改进.初学者难免犯错,希望大家不吝指 ...
 - 【IOS开发笔记03-视图相关】简单计算器的实现
		
UIView 经过前几天的快速学习,我们初步了解的IOS开发的一些知识,中间因为拉的太急,忽略了很多基础知识点,这些知识点单独拿出来学习太过枯燥,我们在今后的项目中再逐步补齐,今天我们来学习APP视图 ...
 - [LeetCode] Basic Calculator 基本计算器
		
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
 - JS-自制提速小工具:开发页面时需要按比例计算宽高值的快速计算器
		
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...
 
随机推荐
- 红色警戒2CE修改教程
			
在大学的时候特别喜欢玩游戏,尤其偏爱单机游戏.在玩一些单机游戏的时候,特意使用了一些修改工具.本来是打算做成一个系列的,但是现在由于时间问题,仅介绍一些.(大概包括rimworld,饥荒,放逐之城,缺 ...
 - service与pod关联
			
当我们创建pod时,仅仅是创建了pod,要为其创建rc(ReplicationController),他才会有固定的副本,然后为其创建service,集群内部才能访问该pod,使用 NodePort ...
 - Python名称空间与作用域
			
什么是名称空间? 比如下图的长方形代表内存,在这个内存里我要设置一个变量100,那么这个变量得有个门牌号,就叫他a吧,但其实变量不是这么存储的,他其实的存储方式是这样的,他会有一个名称空间,这个名称空 ...
 - Python中的序列
			
Python中有四种内建的数据结构,即列表.元组.字典.集合.其中字典和集合我会以后再写,现在先说列表和元组,它们两个和以前提到很多次的字符串, 其实都属于——序列. 一.列表(list): 1. l ...
 - 添加了两个IP
			
//第一步:添加了两个IP root@default:~# ifconfig eth1:0 192.168.99.10 netmask 255.255.255.0 up root@default:~# ...
 - 代码自动补全插件CodeMix全新发布CI 2019.7.15|改进CSS颜色辅助
			
CodeMix是Eclipse的一款插件,它解锁了VS Code和Code OSS附加扩展的各种技术,支持各种语言. 作为Eclipse开发人员,您再也不必觉得自己已被排除在朋友使用Visual St ...
 - Vue打包上线之后CSS没有压缩和不生效
			
前言 当用vue-cli 脚手架 打包压缩时,发现打包出来的css 没有被压缩, 所以查阅了些资料,下面用这个方法解决: 1.首先注释掉webpack.prod.conf.js中下面的代码 new O ...
 - 关于system.timer的使用
			
private System.Timers.Timer _timer = null; if (_timer == null) { _timer = new System.Timers.Timer(); ...
 - zabbix监控Nginx模板
			
前提条件: nginx模块安装了http_stub_status_module和nginx_upstream_check_module: 在nginx的配置文件中配置上: location /stat ...
 - layui  批量上传
			
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="piclist.aspx.c ...