Add and Multiply

Similar题目地址:
https://leetcode.com/problems/basic-calculator-ii/#/description

题目:
给一个string,比如"5.2 + 4 * 2.1 + 8"这样的含double数字的一个等式,只有加号和乘号,求这个等式的结果。follow up是有除号怎么办。同时可以假设输入一定是valid的。

解题思路:
这道题需要用stack来解决。用curr来记录当前的结果,sign表示上一个操作符。当sign是乘号的时候就把栈顶元素拿来相乘再放进stack里面;如果是加号那么就把curr直接push进去。

代码:

public double calculate(String input){
    if(input == null || input.length() == 0){
        return 0.0;
    }
    int len = input.length();
    double curr = 0.0;
    int tens = 1;
    boolean dotSeen = false;
    Stack<Double> stack = new Stack<>();
    char sign = '+';
    for(int i = 0; i <= len - 1; i++){
        if(i <= len - 1 && (input.charAt(i) == '.' || Character.isDigit(input.charAt(i)))){
            if(input.charAt(i) == '.'){
                dotSeen = true;
            }
            else{
                if(dotSeen){
                    tens *= 10;
                }
                curr = curr * 10 + input.charAt(i) - '0';
            }
        }
        if(i == len - 1 || (i <= len - 1 && (input.charAt(i) == '+' || input.charAt(i) == '*'))){
            if(sign == '+'){
                stack.push(curr / tens);
            }
            if(sign == '*'){
                stack.push(stack.pop() * (curr / tens));
            }
            sign = input.charAt(i);
            curr = 0;
            tens = 1;
            dotSeen = false;
        }
    }
    double re = 0;
    for(double i:stack){
        re += i;
    }
    return re;
}

public static void main(String[] args){
    String input = "5.2+4*2.1+8";
    AddandMultiply addandMultiply = new AddandMultiply();
    double rst = addandMultiply.calculate(input);
    System.out.println(rst);
}

Comments

Popular Posts