Leetcode 227 Basic Calculator II
2015-06-27 11:10
267 查看
1. 问题描述
给遗传字符串类型的表达式,计算表达式的值。表达式只包含+、-、*、/和空格。2. 方法与思路
此题和Basic Calculator I类似,只是左右括号换成了乘除符号。基本的做法依然是先转成后缀表达式的形式,然后在进行计算。后缀表达式用
vector<long> postfix的结构存储,为了方便,操作符和操作数都保存在postfix向量中,为了区分,操作数都以负数的形式存储,计算时在变成正数。
class Solution { public: vector<long> convert2postfix(const string &s) { stack<char> op; vector<long> postfix; int tmp = 0,isPreNum = 0; for(int i = 0; i < s.length(); i++) { switch(s[i]) { case ' ': continue; case '*': case '/': while(!op.empty() && (op.top() == '*' || op.top() == '/')) { postfix.push_back(op.top()); op.pop(); } op.push(s[i]); break; case '+': case '-': while(!op.empty()) { postfix.push_back(op.top()); op.pop(); } op.push(s[i]); break; default: if(isPreNum) tmp = tmp*10 + s[i] - '0'; else { tmp = s[i] - '0'; isPreNum = 1; } if(i+1 ==s.length() || (i < s.length() && (s[i+1] >'9' || s[i+1] < '0'))) { postfix.push_back(-tmp); isPreNum = 0; } } } while(!op.empty()) { postfix.push_back(op.top()); op.pop(); } return postfix; } int calculate(string s) { vector<long> postfix = convert2postfix(s); if(postfix.size() == 0) return 0; stack<long> st; long a,b; for(int i = 0; i < postfix.size(); i++) { switch(postfix[i]) { case '+': a = st.top();st.pop(); b = st.top();st.pop(); st.push(b+a); break; case '-': a = st.top();st.pop(); b = st.top();st.pop(); st.push(b-a); break; case '*': a = st.top();st.pop(); b = st.top();st.pop(); st.push(b*a); break; case '/': a = st.top();st.pop(); b = st.top();st.pop(); if(a == 0) return 0; st.push(b/a); break; default: st.push(-postfix[i]); } } return st.top(); } };
相关文章推荐
- 天下武功彼此克制,武学之道玄之又玄
- UVa - 1312 - Cricket Field
- UVa - 1312 - Cricket Field
- Linux系统库函数 -- lseek函数用法
- 树莓派学习笔记—— 源代码方式安装opencv
- Qt 中彩色图像转换为灰度图
- 排序算法实践
- JavaScript 运行机制详解:再谈Event Loop
- Linux虚拟地址->物理地址
- Qt 中彩色图像转换为灰度图
- 教程:在ZYBO板卡实现bin文件的固化
- 树莓派2B的GPIO管脚分布
- Java数据类型和MySql数据类型对应表
- BIEE Mobile App 集成应用详细步骤说明
- 计算机类产品评价技术指标体系研究之图形(像)篇
- Java 中的 static 使用之静态初始化块
- opencv 数字图像处理-图像缩放 自己写cvResize()函数
- '-[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance 0xb000000000000153
- 运行和控制Nginx
- java网络编程实现客户端连接服务器端,并发送消息例子(1)。(阻塞式的方法)