一、题目
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 }