LeetCode——Basic Calculator II
Description:
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.
用两个操作栈来处理数据和操作符。先计算*和/然后变成加减法后再按顺序进行计算。
public class Solution {
    public static int calculate(String s) {
        Stack<Integer> num = new Stack<>();
        Stack<Character> op = new Stack<>();
        op.push('+');
        int n = s.length();
        if(n < 1) return 0;
        for(int i=0; i<n; ) {
        	if(s.charAt(i) == ' ') {
        		i ++;
        	}
        	else if(isOp(s.charAt(i))) {
        		op.push(s.charAt(i));
        		i ++;
        	}
        	else {
        		int temp = 0;
        		while(i < n && isDigit(s.charAt(i))) {
        			temp = temp * 10;
        			temp += s.charAt(i) - '0';
        			i ++;
        		}
        		if(!op.empty() && (op.peek()=='*' || op.peek()=='/')) {
        			if(op.peek() == '*') {
        				temp *= num.pop();
        				op.pop();
        			}
        			else {
        				temp = num.pop() / temp;
        				op.pop();
        			}
        		}
        		num.push(temp);
        	}
        }
        int res = 0;
        while (!op.empty()) {
        	int temp = num.peek();
        	//System.out.println(temp);
        	if (op.peek() == '-') temp = -temp;
        	res += temp;
        	num.pop();
        	op.pop();
        }  
        return res;
    }
	public static boolean isOp(char c) {
		if(c == '+' || c == '-' || c == '*' || c == '/') {
			return true;
		}
		else {
			return false;
		}
	}
	public static boolean isDigit(char c) {
		if(c >= '0' && c <='9') {
			return true;
		}
		else {
			return false;
		}
	}
}
LeetCode——Basic Calculator II的更多相关文章
- [LeetCode] Basic Calculator II 基本计算器之二
		Implement a basic calculator to evaluate a simple expression string. The expression string contains ... 
- LeetCode Basic Calculator II
		原题链接在这里:https://leetcode.com/problems/basic-calculator-ii/ Implement a basic calculator to evaluate ... 
- LeetCode 227. 基本计算器 II(Basic Calculator II)
		227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ... 
- 【LeetCode】227. Basic Calculator II 解题报告(Python)
		[LeetCode]227. Basic Calculator II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: h ... 
- leetcode 224. Basic Calculator 、227. Basic Calculator II
		这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ... 
- 【LeetCode】227. Basic Calculator II
		Basic Calculator II Implement a basic calculator to evaluate a simple expression string. The express ... 
- [LeetCode] Basic Calculator & Basic Calculator II
		Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ... 
- LeetCode OJ Basic Calculator II
		Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public: strin ... 
- [LeetCode] Basic Calculator 基本计算器
		Implement a basic calculator to evaluate a simple expression string. The expression string may conta ... 
随机推荐
- Maven_POM配置详解
			本文转载,方便以后查阅,转载地址:http://blog.csdn.net/ithomer/article/details/9332071 <project xmlns="http:/ ... 
- linux(CentOS7)安装cuda
			感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免.欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ... 
- 转载------让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
			本文是转载及收藏 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法 最近做一个Web网站,之前一直觉得bootstrap非常好,这次使用了bootstrap3,在c ... 
- JS 播放列表收缩展开
			下面要做实现的效果 收缩和展的功能 遵循网页布局,行为,结构,样式 分离 下面是html 结构代码: <div id="drop" class="down_list ... 
- BCM_SDK命令
			启动bcm的sdk,会进入一个类似shell的交互界面,在其中如入命令,可以配置交换机芯片.本文主要记录一下命令: 1.端口限速命令 2.链路聚合命令 3.i2c控制命令 启动方法: /tmp/bcm ... 
- C#中的程序集和命名空间
			C#中的程序集和命名空间 如果说命名空间是类库的逻辑组织形式,那么程序集就是类库的物理组织形式.只有同时指定类型所在的命名空间及实现该类型的程序集,才能完全限定该类型.<精通.NET核心技术-- ... 
- (转)从海康7816的ps流里获取数据h264数据
			海康7816使用ps流来封装h.264数据,这里使用的解码器无法识别ps流,因此需要将h264数据从ps流里提取出来 对于ps流的规定可以参考13818-1文档 这里从7816里获取到一些数据取样 0 ... 
- node.js执行shell命令
			nodejs功能强大且多样,不只是可以实现 服务器端 与 客户端 的实时通讯,另一个功能是用来执行shell命令 首先,引入子进程模块 var process = require('child_pro ... 
- 1077. Kuchiguse (20)【字符串处理】——PAT (Advanced Level) Practise
			题目信息 1077. Kuchiguse (20) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B The Japanese language is notorious f ... 
- Java中关于“=”和“==”的分析
			Java中变量分为普通原始变量(int char float等)和对象 一"=" (1)普通原始变量 普通原始变量的声明和赋值语句例如以下 int a=3; int b=a; 此时 ... 
