Basic Calculator II

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

 

猜你喜欢

转载自hcx2013.iteye.com/blog/2253009
今日推荐