提示

LintCode中的相关算法题实现代码,可以在我的GithHub中下载。

题目需求

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

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

示例 1:

输入: "3+2*2"
输出: 7

示例 2:

输入: " 3/2 "
输出: 1

示例 3:

输入: " 3+5 / 2 "
输出: 5

解题思路

使用栈数据结构,当读到一个操作数的时候,立刻将它放入operatorSum Stack中。

如果见到任何其他的符号“+”、“-" 后,将Operator Stack中所有的元素弹出,并且弹出operatorSum Stack 中两个操作数。然后计算,将计算的结果放入operatorSum Stack。

如果见到任何其他的符号“*”、“/" 后, 弹出Operator Stack中元素,直到遇到“+”、“-" 或者栈中元素为空。

实现代码

public class _227_Calculate {public int calculate(String s) {Stack<Character> stack=new Stack<>();Stack<Integer> opeartorNums=new Stack<>();for(int i=0; i< s.length();i++){char ch= s.charAt(i);switch (ch) {case '+':while (!stack.isEmpty()){calucateHelper(stack, opeartorNums);}stack.push(ch);break;case '-':while (!stack.isEmpty()){calucateHelper(stack, opeartorNums);}stack.push(ch);break;case '*':while (!stack.isEmpty() && stack.peek() =='*' || stack.peek() == '/'){calucateHelper(stack, opeartorNums);}stack.push(ch);break;case '/':while (!stack.isEmpty() && stack.peek() == '*' || stack.peek() == '/'){calucateHelper(stack, opeartorNums);}stack.push(ch);break;case ' ':break;default:int start=i;while (i<s.length() && Character.isDigit(s.charAt(i))){i++;}opeartorNums.push(Integer.valueOf(s.substring(start,i)));--i;break;}}while (!stack.isEmpty()){calucateHelper(stack, opeartorNums);}return opeartorNums.pop();}private void calucateHelper(Stack<Character> stack, Stack<Integer> opeartorNums) {Character character = stack.pop();int result = operatorNums(opeartorNums.pop(), opeartorNums.pop(), character);opeartorNums.push(result);}public int operatorNums(int num1, int num2, Character operator){switch (operator){case '+':return num1+num2;case '-':return num2-num1;case '*':return num1*num2;case '/':return num2/num1;default:return -1;}}public static void main(String[] args) {_227_Calculate calculate=new _227_Calculate();int calculate1 = calculate.calculate("3+2*2-6/5");System.out.println(calculate1);}
}

LetCode: 227. 简单计算器2相关推荐

  1. java安卓编程计算器_菜鸟学Android编程——简单计算器《一》

    菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...

  2. 693. 交替位二进制数 / 227. 基本计算器 II / 264. 丑数 II

    693. 交替位二进制数[简单题][每日一题] 思路:[位运算] 排除特殊情况n=1,此时return true. 将n转为二进制字符串,依次将相邻两位数字进行异或运算. 异或运算的结果为flag,如 ...

  3. 模拟一个简单计算器_阅读模拟器的简单介绍

    模拟一个简单计算器 Read simulators are widely being used within the research community to create synthetic an ...

  4. PTA 基础编程题目集 7-12 两个数的简单计算器 C语言

    PTA 基础编程题目集 7-12 两个数的简单计算器 C语言 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式 ...

  5. 7-12 两个数的简单计算器 (C语言)

    7-12 两个数的简单计算器 (10 分)本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次 ...

  6. 用Python解“两个数的简单计算器”题

    7-12 两个数的简单计算器 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1 ...

  7. 用C语言解“两个数的简单计算器”题

    7-12 两个数的简单计算器 本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1 ...

  8. 06-1. 简单计算器(20)

    06-1. 简单计算器(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 张彤彧(浙江大学) 模拟简单运算器的工作.假设计算器只 ...

  9. c语言对10求余不为7,【PTA | 基础编程题目集】7-12 两个数的简单计算器 (10分)

    本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加.减.乘.除或求余运算.题目保证输入和输出均不超过整型范围. 输入格式: 输入在一行中依次输入操作数1.运算符.操作数2,其间以1个 ...

最新文章

  1. linux下远程传输文件命令scp使用注解
  2. OC--有这么一个 整数 123456789,如何将这个整数的每一位数,从末位开始依次放入数组中,并遍历 倒序输出字符串...
  3. ffmpeg源码分析——av_register_all
  4. Selenium高亮页面对象
  5. jQuery的jquery-1.10.2.min.map触发404(未找到)
  6. Sass在编译中文注释中报错
  7. dns服务器zones文件,DNS服务安装与配置
  8. Windows 7 蓝屏代码大全 amp; 蓝屏全攻略
  9. 编译器预定义宏的查看和使用
  10. React开发(193):react无障碍使用程序获取焦点第一种
  11. 骨干云池存储方式_你好,我存个对象(大误)漫谈对象存储
  12. python3 gui tk代码_python3 修改计算机名称GUI程序
  13. LeetCode:Longest Substring Without Repeating Characters(最长不重复子串)
  14. jmeter简单实践(九)
  15. windows下使用vim
  16. python打印图像所有的像素值
  17. Vue3中获取鼠标在浏览器x轴和y轴的位置
  18. C# 将方形图片剪切为圆形(winForm)
  19. 官宣:两校合并,落户省会!
  20. 关于聊天室文字聊天(ListView 显示数据变化后滚动到最底部 )

热门文章

  1. 2017/11/3模拟赛
  2. ORACLE的数据类型
  3. JSON,java对象转json
  4. Netty 实现 websocket
  5. ftp的主动模式(port)与被动模式(PASV)
  6. 卫星导航技术主要应用领域有哪些?
  7. 计算机视觉行业迎来大发展,多角度解读未来前景
  8. 暗黑再临Java正版_暗黑破坏神之墨菲斯托
  9. linux用卸载软件管理,Linux下软件的安装卸载管理
  10. java enumerable_java - Java相当于C#的'Enumerable.Any' - 堆栈内存溢出