Basic Calculator II | LeetCode 48ms C++ Solution
来源:互联网 发布:李鸿章 袁世凯 知乎 编辑:程序博客网 时间:2024/04/28 21:18
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +
, -
, *
, /
operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7" 3/2 " = 1" 3+5 / 2 " = 5
Note: Do not use the eval
built-in library function.
解题思路:这里首先需要考虑的就是*和/,即乘法和除法相对于减法和加法的优先级。所以这里使用两个栈,分别存储操作符和操作数
操作符只存储加号和减号,当遇到乘号和除法时,立即进行计算并压入栈,代码如下:
int calculate(string s) {
int res=0;
int size=s.size();
stack<int> numbers;
stack<char> operate;
operate.push('+');
for(int i=0;i<size;){
char cur=s[i];
//跳过空格
if(cur==' '){
++i;
continue;
}
//处理乘法和除法
if(cur=='*'||cur=='/'){
int step=i+1;
while(s[step]==' ')
++step;
int num=0;
while(s[step]>='0'&&s[step]<='9'){
num=num*10+s[step]-'0';
++step;
}
i=step;
int num2=numbers.top();
numbers.pop();
if(cur=='*'){
num=num*num2;
}else{
num=num2/num;
}
numbers.push(num);
continue;
}else if(cur=='-'||cur=='+'){
operate.push(cur);
++i;
}else{
int step=i;
int num=0;
while(s[step]>='0'&&s[step]<='9'){
num=num*10+s[step]-'0';
++step;
}
i=step;
numbers.push(num);
}
}
// return numbers.top();
while(!numbers.empty()){
char oper=operate.top();
operate.pop();
int num=numbers.top();
numbers.pop();
if(oper=='-')
res+=(-1*num);
else
res+=num;
}
return res;
}
- Basic Calculator II | LeetCode 48ms C++ Solution
- [LeetCode] Basic Calculator II
- [leetcode] Basic Calculator II
- leetcode Basic Calculator II
- 【LeetCode】Basic Calculator II
- [Leetcode]Basic Calculator II
- LeetCode Basic Calculator II
- [Leetcode]Basic Calculator II
- leetcode:Basic Calculator II
- leetcode:Basic Calculator II
- Basic Calculator II -- leetcode
- *LeetCode-Basic Calculator II
- leetcode:Basic Calculator II
- LeetCode -- Basic Calculator II
- 《leetCode》:Basic Calculator II
- 【Leetcode】Basic Calculator II
- LeetCode:Basic Calculator II
- leetcode Basic Calculator II
- 位运算及其应用
- 树莓派hwclock命令参数及用法详解--linux显示/设置硬件时钟命令
- 写css 的时候可以自动刷新界面的js
- 黑马程序员日记-16
- Hadoop自定义Writable实现二次排序
- Basic Calculator II | LeetCode 48ms C++ Solution
- 《Effective Java》笔记
- 转帖:PLSQL怎么创建oracle数据库用户
- Java super关键字总结
- 使用Andbase框架实现屏幕适配
- 用“计算机”,访问FTP
- JAVA环境变量设置
- 扩展欧几里得模板 poj-C Looooops
- R中包的安装方法