题目:
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+
, -
,*
,/
四种运算符和空格
。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2" 输出: 7
示例 2:
输入: " 3/2 " 输出: 1
示例 3:
输入: " 3+5 / 2 " 输出: 5
说明:
- 你可以假设所给定的表达式都是有效的。
- 请不要使用内置的库函数
eval
。
分析:
先遍历一遍字符串,将需要做加法的数字存进栈中,同时将乘除先计算出结果。减法转换为加法。然后再将栈中的数字遍历加和。
程序:
class Solution { public int calculate(String s) { char[] arr = s.replaceAll(" ", "").toCharArray(); Stack<Integer> stack = new Stack<>(); int res = 0; char prev = ' '; for(int i = 0; i < arr.length; ++i){ StringBuilder str = new StringBuilder(); while(i < arr.length && arr[i] >= '0' && arr[i] <= '9'){ str.append(arr[i]); i++; } int num = Integer.parseInt(str.toString()); if(prev == '+'){ stack.push(num); }else if(prev == '-'){ stack.push(-num); }else if(prev == '*'){ stack.push(stack.pop() * num); }else if(prev == '/'){ stack.push(stack.pop() / num); }else{ stack.push(num); } if(i < arr.length) prev = arr[i]; } while (!stack.isEmpty()) { res += stack.pop(); } return res; } }