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.Solution:
Go through the sting:
1. Get the number
2. If we find a operator, it means we need to process the previous result, and update the sign.
After going through the string, we take all numbers from the stack and add them up to the result.
Code:
public class Solution { public int calculate(String s) { if (s == null || s.length() == 0) { return 0; } Stack<Integer> stack = new Stack<>(); int len = s.length(); int num = 0; char sign = '+'; for (int i = 0; i < len; i++) { char c = s.charAt(i); if (c >= '0' && c <= '9') { num = num * 10 + c - '0'; } if (c == '+' || c == '-' || c == '*' || c == '/' || i == len - 1) { if (sign == '+') { stack.push(num); } if (sign == '-') { stack.push(-num); } if (sign == '*') { stack.push(stack.pop() * num); } if (sign == '/') { stack.push(stack.pop() / num); } sign = c; num = 0; } } int res = 0; for (int i : stack) { res += i; } return res; } }