递归实现基本计算器+-*/()
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,乘号*,除号/,非负整数和空格 。
1 /* 2 3 https://leetcode-cn.com/problems/basic-calculator/ 4 5 实现一个基本的计算器来计算一个简单的字符串表达式的值。 6 7 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。 8 9 扩展: * / 10 11 * */ 12 import java.util.ArrayList; 13 import java.util.List; 14 import java.util.Stack; 15 16 public class code224_CalculatorI 17 { 18 public int calculate(String s) { 19 List<Character> list = new ArrayList<>(); 20 for(int i = 0; i < s.length(); i++) 21 list.add(s.charAt(i)); 22 return helper(list); 23 } 24 public int helper(List<Character> s){ 25 Stack<Integer> stack = new Stack<>(); 26 char sign = '+'; 27 int num = 0, res = 0; 28 while(s.size() > 0) 29 { 30 char c = s.remove(0); 31 if (Character.isDigit(c)) 32 { 33 num = 10 * num + (c - '0'); 34 } 35 if (c == '(') 36 num = helper(s); 37 if ((!Character.isDigit(c) && c != ' ') || s.size() == 0) 38 { 39 if (sign == '+') 40 stack.push(num); 41 else if (sign == '-') 42 stack.push(-num); 43 else if (sign == '*') 44 { 45 stack.push(stack.pop() * num); 46 } 47 else if (sign == '/') 48 { 49 stack.push(stack.pop() / num); 50 } 51 sign = c; 52 num = 0; 53 } 54 if (c == ')') 55 { 56 break; 57 } 58 } 59 while (!stack.isEmpty()){ 60 res += stack.pop(); 61 } 62 return res; 63 } 64 public static void main(String[] args){ 65 code224_CalculatorI calculator = new code224_CalculatorI(); 66 System.out.println(calculator.calculate("2 * (3 + 5)")); 67 System.out.println(calculator.calculate("(1+(4+5+2)-3)+(6+8)")); 68 } 69 }