LeetCode——Basic Calculator
Description:
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open (
and closing parentheses )
, the plus +
or minus sign -
, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2 " 2-1 + 2 " = 3 "(1+(4+5+2)-3)+(6+8)" = 23
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(s.charAt(i) == '(') { op.push('('); op.push('+'); i ++; } else if(isOp(s.charAt(i))) { op.push(s.charAt(i)); i ++; } //523 +-(++ else if(s.charAt(i) == ')') { int res = 0; while (!op.empty() && !(op.peek() == '(')) { int temp = num.peek(); if (op.peek() == '-') temp = -temp; res += temp; num.pop(); op.pop(); } System.out.println(res); op.pop(); num.push(res); i ++; } else { int temp = 0; while(i < n && isDigit(s.charAt(i))) { temp = temp * 10; temp += s.charAt(i) - '0'; i ++; } num.push(temp); } } int res = 0; while (!op.empty()) { int temp = num.peek(); if (op.peek() == '-') temp = -temp; res += temp; num.pop(); op.pop(); } return res; } public static boolean isOp(char c) { if(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)