赞
踩
思路:
res用来表示一个括号内的运算结果,如果遇到 ' ) ' ,则表示这个括号结束,取出栈中的符号和结果,将res赋值给num。
一个表达式分为三部分:左边表达式①,运算符③,右边表达式②
一个只包含加减和括号的表达式,我们可以从左到右计算,遇到括号就先算括号里面的。具体来说就是先计算左边的表达式,再计算右边表达式,最后根据运算符,计算①和②的计算。
- public static int calculate(String s){
- int res=0;
- int num=0;
- int sign=1;
- Stack<Integer> stack=new Stack<>();
- for(int i=0;i<s.length();i++){
- char c=s.charAt(i);
- if(c==' ') continue;
- if(c>='0'&&c<='9'){
- num=num*10+c-'0';
- if(i+1<s.length()&&s.charAt(i+1)>='0'&&s.charAt(i+1)<='9'){
- continue;
- }
- }
- else if(c=='+'||c=='-'){
- num=0;
- sign=c=='+'?1:-1;
- }
- else if(c=='('){
- stack.push(res);
- stack.push(sign);
- num=0;
- sign=1;
- }
- else if(c==')'){
- sign=stack.pop();
- num=res;
- res=stack.pop();
- }
- res+=sign*num;
- }
- return res;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。