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;
    }
}