227. 基本计算器 II

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

示例 1:

输入: “3+2*2”

输出: 7

示例 2:

输入: " 3/2 "

输出: 1

示例 3:

输入: " 3+5 / 2 "

输出: 5

说明:

你可以假设所给定的表达式都是有效的。

请不要使用内置的库函数 eval。

PS:

每次处理完一个数就压栈,可以不处理括号

class Solution {
public int calculate(String s) {
Stack<Integer> stack = new Stack<>(); int sign = 1; // 表示正负号 2-3*3 = 2+(-3)*3
int msign = 0; // 1表示相乘 -1 表示相除 0 表示无操作
for(int i=0; i<s.length(); i++){
char ch = s.charAt(i);
if(Character.isDigit(ch)){
// 如果是数字
int num = ch - '0';
while(i+1<s.length() && Character.isDigit(s.charAt(i+1))){
num = num*10 + (s.charAt(i+1) - '0');
i++;
} if(msign == 1){ //相乘
stack.push(stack.pop() * num);
msign = 0;
}else if(msign == -1){ // 相除
stack.push(stack.pop() / num);
msign = 0;
}else{
stack.push(num * sign);
} }else if(ch == '+'){
sign = 1;
}else if(ch == '-'){
sign = -1;
}else if(ch == '*'){
msign = 1;
sign = 1;
}else if(ch == '/'){
msign = -1;
sign = 1;
}
} int res = 0;
while(!stack.isEmpty()){
res += stack.pop();
}
return res;
}
}

最新文章

  1. hyper-v上的虚拟机安装linux LC后CDROM无法使用
  2. HDFS Federation (读书笔记)
  3. 2016年JS面试题目汇总
  4. 各种数据处理方案(SQL,NoSQL,其他)的应用场景
  5. MySQL数据库远程连接开启方法
  6. 结构体buf_chunk_t
  7. POJ 2429
  8. Linux查看硬件信息,主板型号及内存硬件,驱动设备,查看设备,查看CPU。
  9. Linux无处不在
  10. html5的Canvas
  11. mysql学习(补充)
  12. cx_Oracle模块学习之绑定变量
  13. Linux环境进程间通信(一):管道及命名管道
  14. xtrabackup 2.0.8备份mysql5.1.65报错
  15. WebStorm 2017 最新版激活方式
  16. shell下office、html、pdf文档互转方法
  17. TypeError:_12.store.query is not a function
  18. 一个类搞定UIScrollView那些事儿
  19. kubernetes 微服务西游记(持续更新中...)
  20. 子集三种生成方法 java

热门文章

  1. JDBC12 ORM01 Object[]存放一条记录
  2. JDBC08时间处理
  3. 初识spring boot maven管理--配置文件
  4. myeclipse 创建maven web项目
  5. java-&gt; 利用IO操作与递归实现目录的复制
  6. Python单元测试框架:unittest(一)
  7. delete old data in elasticsearch
  8. NullPointerException异常没有异常栈打印问题追踪
  9. javascript 内存和连等赋值
  10. 使用PHP得到所有的HTTP请求头