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. 多线程编程-- part5.1 互斥锁ReentrantLock

    ReentrantLock简介 Reentrantlock是一个可重入的互斥锁,又被称为独占锁. Reentrantlock:分为公平锁和非公平锁,它们的区别体现在获取锁的机制上是否公平.“锁”是为了 ...

  2. 关于gitlab+jenkins自动部署代码的实现

    本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...

  3. redis基础学习

    redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了java ...

  4. 小程序UI设计(2)-符合视觉规范-字体规范

    下图是微信小程序官方要求字体规范 根据此要求小程序设计工具定制了符合规范的组件.如下图 工具使用时,将左侧组件拖拽到设计区域即可.字体大小和颜色都是按照规范设置的.在使用时根据微信要求在不同位置摆放即 ...

  5. Liunx 用户权限之目录

    总结一下: 今天又对liunx权限的认知多了一点,就是关于目录的权限的作用 可以打个比方来形容就是:相当于一个大门 只有目录权限都有的情况下,才能够对目录中的文件进行目录权限操作 例如:drwxrwx ...

  6. --set-upstream新版本不在支持

    --set-upstream最新版本貌似不在支持,使用--track和--set-uptream-to来替代 --set-upstream: git branch --set-upstream [本地 ...

  7. Redis中info all命令解析

    127.0.0.1:8376> info all# Server    --- 服务器信息redis_version:2.8.20 -- redis服务器版本redis_git_sha1:000 ...

  8. hive判断数据一个表是否在另一个表中(二)

    1.一个表中的数据不存在另一个表中 2.一个表中的数据 存在另一个表中:

  9. 性能优化(1+N,list与iterator,缓存,事务)

    1.注意session.clear()的运用,尤其是不断分页循环的时候 A 在一个大集合中进行遍历,取出其中含有敏感字的对象 B 另一种形式的内存泄露. 2.1+N问题 问题描述:如@ManyToOn ...

  10. Python实现PDF文件截取

    python3截取PDF文件中的一部分. from PyPDF2 import PdfFileWriter, PdfFileReader # 开始页 start_page = 0 # 截止页 end_ ...