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; } } }
作者:Pickle
声明:对于转载分享我是没有意见的,出于对博客园社区和作者的尊重一定要保留原文地址哈。
致读者:坚持写博客不容易,写高质量博客更难,我也在不断的学习和进步,希望和所有同路人一道用技术来改变生活。觉得有点用就点个赞哈。
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112835275-168981902.gif)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112841431-2047172832.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112847494-1544911856.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112904385-918783221.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111120143119-1302805212.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112856369-1466718103.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111112830416-794416355.jpg)
![](https://images2015.cnblogs.com/blog/735119/201701/735119-20170111113919510-1155220901.gif)