递归实现基本计算器+-*/()

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,乘号*,除号/,非负整数和空格 。

 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 }

 

posted @ 2020-04-05 22:18  ~花开不败~  阅读(1249)  评论(0编辑  收藏  举报