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 基本计算器的更多相关文章

  1. [Swift]LeetCode227. 基本计算器 II | Basic Calculator II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  2. LeetCode227:基本计算器II

    感觉自己的思路还不错,比较简单清晰,代码量也比较少,没有用到记录运算符的变量或栈,就想把这个思路发一下博客. 题目: 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数 ...

  3. LeetCode 227. 基本计算器 II(Basic Calculator II)

    227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...

  4. 1.C#WinForm基础制作简单计算器

    利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...

  5. 自己动手写计算器v1.1

    这个改动主要是使用工厂模式替代了简单工厂模式,这样做的好处是如果以后我们要扩充其他运算时,就不用总是去修改工厂类, 这是可以采取工厂模式,主要是将原来简单工厂类的逻辑判断分离出来,将它作为一个借口,与 ...

  6. 自己动手写计算器v1.0

    今天突发奇想,想着看了还几个设计模式了,倒不如写点东西来实践它们.发现计算器这种就比较合适,打算随着设计模式的学习,会对计算器不断的做改进. 包括功能的增加和算法的改进.初学者难免犯错,希望大家不吝指 ...

  7. 【IOS开发笔记03-视图相关】简单计算器的实现

    UIView 经过前几天的快速学习,我们初步了解的IOS开发的一些知识,中间因为拉的太急,忽略了很多基础知识点,这些知识点单独拿出来学习太过枯燥,我们在今后的项目中再逐步补齐,今天我们来学习APP视图 ...

  8. [LeetCode] Basic Calculator 基本计算器

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  9. JS-自制提速小工具:开发页面时需要按比例计算宽高值的快速计算器

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...

随机推荐

  1. Oracle DBA 学习总结

    对于学习Oracle 数据库,应该先要了解Oracle 的框架.它有物理结构(由控制文件.数据文件.重做日志文件.参数文件.归档文件.密码文件组成) ,逻辑结构(表空间.段.区.块),内存分配( SG ...

  2. java多线程ExecutorService

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...

  3. HackIM web关writeup

    Web100 访问页面将看到下面的错误 在burp里使用request / response查看有没有什么不正常的地方.如下图所示,在返回的数据包里被设置了两次不同的PHPSESSID. 如果我把PH ...

  4. 1.(基础)tornado初识

    tornado的话就不带着大家看源码了,今后可能会介绍,目前只是看简单的用法,而且当前的tornado版本不高,其实说白了这是很久以前写的文档,但是由于格式的原因,所以打算用Markdown重写一次. ...

  5. 网络初级篇之STP(概念原理)

    一.什么是STP 生成树协议(Spanning Tree Protocol,STP),是一种工作在OSI网络模型中的第二层(数据链路层)的通信协议,基本应用是防止交换机冗余链路产生的环路.用于确保以太 ...

  6. Linux系统吃“内存”现象

    而当我们使用free命令查看Linux系统内存使用情况时,会发现内存使用一直处于较高的水平,即使此时系统并没有运行多少软件.这正是Windows和Linux在内存管理上的区别,乍一看,Linux系统吃 ...

  7. windows删除已注册服务

    背景:近日,想要学习mysql主从复制,于是想在本地用多个mysql实例进行试验,试验的过程中总是挫折不断,生手不易,安装了很多实例,测试完成之后,想要删除这些实例. 虽然任务管理器可以停止任务,但是 ...

  8. redis弱密码漏洞利用

    背景: redis无认证,或者弱密码,可以成功连接到redis服务器 反弹shell拿到的权限取决于redis的启动账号 操作: 1. Centos7安装redis客户端 #yum install r ...

  9. MHA监控进程异常退出(MHA版本:0.56)

    最近遇到一个非常诡异的问题,mha后台进程自己中断退出了.以下是报错:Mon Dec 21 20:16:07 2015 - [info] OK.Mon Dec 21 20:16:07 2015 - [ ...

  10. 自定义 Swiper 的上一页,下一页按钮

    1. Swiper 的上一页,下一页按钮,不是必需包含在container 中的 2. 定义上一页,下一页按钮的样式,CSS略.... 3. 在初始化Swiper中,定义上一页,下一页按钮