# Basic Calculator II

#1

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: 7
```

Example 2:

```Input: " 3/2 "
Output: 1```

Example 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.

#2

The below code uses a stack to store the operands and calculates the next value whenever we hit an operand.

``````class Solution {
public int calculate(String s) {
if(s==null || s.length()==0) return 0;
Stack<Integer> stack = new Stack<>();
char sign = '+';
int num = 0;
Set<Character> ops = new HashSet<>(Arrays.asList('+', '-', '*', '/'));
for(int i=0;i<s.length();i++){
char ch = s.charAt(i);
if(ch>='0' && ch<='9'){
num = num*10+(ch-'0');
}
if(ops.contains(ch) || i==s.length()-1){
if(sign=='+') stack.push(num);
else if(sign=='-') stack.push(-num);
else if(sign=='*') stack.push(stack.pop() * num);
else if(sign=='/') stack.push(stack.pop()/num);
sign = ch;
num = 0;
}
}

int result = 0;
while(!stack.isEmpty()){
result += stack.pop();
}
return result;
}
}
``````