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


带有+、-、*、/的运算。

 

与上一题累死,用栈做。

public class Solution {
    public int calculate(String s) {
        Stack<String> stack = new Stack();
        int start = 0;
        int num = 0;
        while (start < s.length()){
            char ch = s.charAt(start);
            if (Character.isDigit(ch)){
                num = num * 10 + ch - '0';
            } else if(ch == ' ' ){
                
            } else {
                if (!stack.isEmpty() && (stack.peek().equals("*") || stack.peek().equals("/"))){
                    String str = stack.pop();
                    int num2 = Integer.valueOf(stack.pop());
                    if (str.equals("*")){
                        num = num2 * num;
                    } else {
                        num = num2 / num;
                    }
                }
                stack.push(String.valueOf(num));
                stack.push(String.valueOf(ch));
                num = 0;
            }
            start++;
        }
        if (!stack.isEmpty() && (stack.peek().equals("*") || stack.peek().equals("/"))){
            String str = stack.pop();
            int num2 = Integer.valueOf(stack.pop());
            if (str.equals("*")){
                num = num * num2;
            } else {
                num = num2 / num;
            }
        }
        if (!stack.isEmpty() && stack.pop().equals("-")){
            num = -num;
        }
        while (stack.size() > 1){
            int num1 = Integer.valueOf(stack.pop());
            if (stack.pop().equals("-")){
                num1 = -num1;
            }
            num = num + num1;
        }
        if (!stack.isEmpty())
            return Integer.valueOf(stack.pop()) + num;
        else {
            return num;
        }
    }
}

 

 

 

public class Solution {
public int calculate(String s) {
    int len;
    if(s==null || (len = s.length())==0) return 0;
    Stack<Integer> stack = new Stack<Integer>();
    int num = 0;
    char sign = '+';
    for(int i=0;i<len;i++){
        if(Character.isDigit(s.charAt(i))){
            num = num*10+s.charAt(i)-'0';
        }
        if((!Character.isDigit(s.charAt(i)) &&' '!=s.charAt(i)) || i==len-1){
            if(sign=='-'){
                stack.push(-num);
            }
            if(sign=='+'){
                stack.push(num);
            }
            if(sign=='*'){
                stack.push(stack.pop()*num);
            }
            if(sign=='/'){
                stack.push(stack.pop()/num);
            }
            sign = s.charAt(i);
            num = 0;
        }
    }

    int re = 0;
    for(int i:stack){
        re += i;
    }
    return re;
}
}