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 int calculate(String s) { if (s == null || s.length() == 0) { return 0; } Stack<Integer> num = new Stack<>(); Stack<Character> symbol = new Stack<>(); s += "#"; boolean isNum = false; int cnt = 0; for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == ' ') { continue; } char charAt = s.charAt(i); if (Character.isDigit(charAt)) { cnt = cnt * 10 + (charAt - '0'); isNum = true; } else { if (isNum) { num.push(cnt); cnt = 0; isNum = false; if (!symbol.isEmpty() && (symbol.peek() == '*' || symbol.peek() == '/')) { char pop = symbol.pop(); int b = num.pop(); int a = num.pop(); if (pop == '*') { num.push(a * b); } else { num.push(a / b); } } } if (charAt != '#') { symbol.push(charAt); } } } if (!symbol.isEmpty()) { int tmp = 0; while (!symbol.isEmpty()) { Character pop = symbol.pop(); int a = num.pop(); if (pop == '+') { tmp += a; } else { tmp -= a; } } num.push(tmp + num.pop()); } return num.pop(); } }