Basic Calculator II
来源:互联网 发布:怎么查网络延迟 编辑:程序博客网 时间:2024/06/03 22:43
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.
第一遍做用的是递归来做,有些复杂,当运算的数很多时会报java.lang.StackOverflowError的错误!
这里有个容易忽略的点例如"1-2+3",这样下一步得到的"-1+3"会以负号开头,所以要小心。
public class Solution { public int calculate(String s) {String str=s.replace(" ", "");return calculateStr(str); }public int calculateStr(String str) {// TODO Auto-generated method stubboolean negtiveStart=false;if(str.charAt(0)=='-'){negtiveStart=true;}int left;if(isDigit(str))return Integer.parseInt(str); int idx=1;while(str.charAt(idx)>='0'&&str.charAt(idx)<='9'){idx++;}if(negtiveStart){str=str.substring(0);}left=Integer.parseInt(str.substring(0, idx));if(str.charAt(idx)=='+'){int right=calculateStr(str.substring(idx+1));return left+right;}if(str.charAt(idx)=='-'){String rightStr=str.substring(idx+1);if(isDigit(rightStr)){int right=Integer.parseInt(str.substring(idx+1));return left-right;}else{int nextIdx=idx+1;while(str.charAt(nextIdx)>='0'&&str.charAt(nextIdx)<='9'){nextIdx++;}int right=Integer.parseInt(str.substring(idx+1, nextIdx));return calculateStr(left-right+str.substring(nextIdx));}}if(str.charAt(idx)=='*'){String rightStr=str.substring(idx+1);if(isDigit(rightStr)){int right=Integer.parseInt(str.substring(idx+1));return left*right;}else{int nextIdx=idx+1;while(str.charAt(nextIdx)>='0'&&str.charAt(nextIdx)<='9'){nextIdx++;}int right=Integer.parseInt(str.substring(idx+1, nextIdx));return calculateStr(left*right+str.substring(nextIdx));}}if(str.charAt(idx)=='/'){String rightStr=str.substring(idx+1);if(isDigit(rightStr)){int right=Integer.parseInt(str.substring(idx+1));return left/right;}else{int nextIdx=idx+1;while(str.charAt(nextIdx)>='0'&&str.charAt(nextIdx)<='9'){nextIdx++;}int right=Integer.parseInt(str.substring(idx+1, nextIdx));return calculateStr(left/right+str.substring(nextIdx));}}return 0;} public boolean isDigit(String str) {// TODO Auto-generated method stubint idx=0;while(idx<str.length()&&str.charAt(idx)>='0'&&str.charAt(idx)<='9'){idx++;}if(idx==str.length()){return true;}return false;}}这个题应该用栈来解决:
public class Solution { public int calculate(String s) { if(s==null || s.length()==0) return 0; LinkedList<Integer> list = new LinkedList<Integer>(); for(int i=0; i<s.length(); i++) { char c = s.charAt(i); if(Character.isDigit(c)) { int cur = c-'0'; while(i+1<s.length() && Character.isDigit(s.charAt(i+1))) { cur = cur * 10 + s.charAt(i+1) - '0'; ++i; } if(!list.isEmpty() && (list.peek() == 2 || list.peek()==3)) { int op = list.pop(); int opl = list.pop(); int res = 0; if(op==2) res = opl * cur; else res = opl / cur; list.push(res); } else { list.push(cur); } } else if(c==' ') continue; else { switch (c) { case '+': list.push(0); break; case '-': list.push(1); break; case '*': list.push(2); break; case '/': list.push(3); break; default: return -1; } } } if(list.isEmpty()) return 0; Collections.reverse(list); int res = list.poll(); while(!list.isEmpty()) { int op = list.poll(); int opr = list.poll(); if(op==0) res += opr; else res -= opr; } return res; } }
0 0
- Basic Calculator & Basic Calculator II
- [LeetCode] Basic Calculator II
- Basic Calculator II
- [leetcode] Basic Calculator II
- leetcode Basic Calculator II
- Basic Calculator II
- 227Basic Calculator II
- 【LeetCode】Basic Calculator II
- Basic Calculator II
- [Leetcode]Basic Calculator II
- Basic Calculator II
- LeetCode227:Basic Calculator II
- Basic Calculator II
- Basic Calculator II
- Basic Calculator II(**)
- LeetCode Basic Calculator II
- [Leetcode]Basic Calculator II
- Basic Calculator II
- ELK配置
- [数据结构]c语言实现顺序栈的入栈,出栈,清空,销毁等操作
- Tomcat 并发优化
- ArrayList容器排序 comparator接口与comparable接口的使用
- Python.xlrd&xlwt -- Excel读写
- Basic Calculator II
- Js动态添加div实现模块复制
- 自己写的贪吃蛇(2)
- 内存管理:02虚拟存储器
- n个正整数,联接成一排,组成一个最小(最大)的多位整数
- 关于Android Studio快捷键的那些事儿
- 简易计算器之换主题
- dump函数以及数字类型浅析
- BZOJ3060/POI 2012 Tour de Byteotia