题解 | #表达式求值#
表达式求值
http://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4
//核心思想:符号全部消化掉,全都转换成数字存入栈中,最后将栈中数字累加得到表达式计算结果;
//碰到括号,把括号中的子字符串递归处理,因此方法中真正处理的是 +-*/ 和 数字 的字符
import java.util.*;
public class Solution {
//1、数字 2、运算符 3、括号(遇到括号就先计算括号内的子字符的结果)
public int solve(String s) {
s.trim();
s.replaceAll(" ","");
Deque<Integer> stack = new ArrayDeque<>();
int number = 0;
char sign = '+';
char[] cs = s.toCharArray();
for(int i = 0; i<cs.length;i++){
char c = cs[i];
if(Character.isDigit(c)){
number = number*10+(c-'0');
}
if(c=='('){
int countKuoHao = 1;
int j = i+1;
while(countKuoHao !=0){
if(cs[j] == '('){
countKuoHao++;
}
if(cs[j] == ')'){
countKuoHao--;
}
j++;
}
number = solve(s.substring(i+1,j-1));
i = j-1;
}
if(!Character.isDigit(c) || i == cs.length-1){
if(sign == '+') stack.push(number);
if(sign == '-') stack.push(-1*number);
if(sign == '*') stack.push(stack.pop()*number);
if(sign == '/') stack.push(stack.pop()/number);
number = 0;
sign = c;
}
}
int ans = 0;
while(!stack.isEmpty()){
ans+=stack.pop();
}
return ans;
}
}

查看1道真题和解析