LeetCode——Basic Calculator

Description:

Implement a basic calculator to evaluate a simple expression string.

The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .

You may assume that the given expression is always valid.

Some examples:

"1 + 1" = 2
" 2-1 + 2 " = 3
"(1+(4+5+2)-3)+(6+8)" = 23

 

Note: Do not use the eval built-in library function.

用两个操作栈来处理,具体见代码。

public class Solution {
    public static int calculate(String s) {
        Stack<Integer> num = new Stack<>();
        Stack<Character> op = new Stack<>();
        op.push('+');
        int n = s.length();
        if(n < 1) return 0;
        for(int i=0; i<n; ) {
        	if(s.charAt(i) == ' ') {
        		i ++;
        	}
        	else if(s.charAt(i) == '(') {
        		op.push('(');
        		op.push('+');
        		i ++;
        	}
        	else if(isOp(s.charAt(i))) {
        		op.push(s.charAt(i));
        		i ++;
        	}
        	//523   +-(++
        	else if(s.charAt(i) == ')') {
        		int res = 0;
                while (!op.empty() && !(op.peek() == '(')) {  
                	int temp = num.peek();
                	if (op.peek() == '-') temp = -temp;
                	res += temp;
                	num.pop();
                	op.pop();
                }
                System.out.println(res);
                op.pop();
                num.push(res);
                i ++;
        	}
        	else {
        		int temp = 0;
        		while(i < n && isDigit(s.charAt(i))) {
        			temp = temp * 10;
        			temp += s.charAt(i) - '0';
        			i ++;
        		}
        		
        		num.push(temp);
        	}
        	
        }
        int res = 0;
        while (!op.empty()) {  
        	int temp = num.peek();  
        	if (op.peek() == '-') temp = -temp;  
        	res += temp;  
        	num.pop();  
        	op.pop();  
        }  

        return res;
        
    }
	public static boolean isOp(char c) {
		if(c == '+' || c == '-') {
			return true;
		}
		else {
			return false;
		}
	}
	public static boolean isDigit(char c) {
		if(c >= '0' && c <='9') {
			return true;
		}
		else {
			return false;
		}
	}
}

 

posted @ 2015-07-01 23:28  Pickle  阅读(175)  评论(0编辑  收藏  举报