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.
Example 1:
Input: "3+2*2" Output: 7Example 2:
Input: " 3/2 " Output: 1Example 3:
Input: " 3+5 / 2 " Output: 5
Note:
- You may assume that the given expression is always valid.
- Do not use the
eval
built-in library function.
Approach #1: Stack. [Java]
class Solution { public int calculate(String s) { if (s == null || s.length() == 0) return 0; Stack<Integer> stack = new Stack(); s += '+'; char op = '+'; for (int i = 0, n = 0; i < s.length(); ++i) { char c = s.charAt(i); if (c >= '0' && c <= '9') { n = n * 10 + c - '0'; continue; } if (c == ' ') continue; if (op == '+') stack.push(n); else if (op == '-') stack.push(-n); else if (op == '*') stack.push(stack.pop() * n); else if (op == '/') stack.push(stack.pop() / n); op = c; n = 0; } int ret = 0; while (!stack.empty()) ret += stack.pop(); return ret; } }