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
Post a Comment