227. Basic Calculator II

一、题目

  1、审题

  

  2、分析

    给出包含 +、-、*、/ 以及空格、数字的正确的数学计算式,求出其正确答案。

二、解答

  1、思路

    新建一个栈,存放所有的带符号的数值,其中 出现 +、- 号时作为下一个数值的符号;

    当出现 * / 号时,从栈中出栈一个数值与下一个数值进行运算后入栈。

    最终将栈中所有数值进行求和运算。

 1     public int calculate11(String s) { 
 2         
 3         int len;
 4         if(s == null || (len = s.length()) == 0)
 5             return 0;
 6         
 7         Stack<Integer> stack = new Stack<>();
 8         int num = 0;
 9         char sign = '+';
10         for (int i = 0; i < len; i++) {
11             char ch = s.charAt(i);
12             if(Character.isDigit(ch)) {
13                 num = num * 10 + ch - '0';
14             }
15             
16             if((!Character.isDigit(ch) && ch != ' ') || i == len - 1) {
17                 if(sign == '-')
18                     stack.push(-num);
19                 else if(sign == '+')
20                     stack.push(num);
21                 else if(sign == '*')
22                     stack.push(stack.pop() * num);
23                 else if(sign == '/')
24                     stack.push(stack.pop() / num);
25 
26                 sign = s.charAt(i);
27                 num = 0;
28             }
29         }
30         
31         int re = 0;
32         for(int i: stack)
33             re += i;
34         return re;
35     }

 

posted @ 2018-11-07 17:16  skillking2  阅读(130)  评论(0编辑  收藏  举报