题解 | #表达式求值#
表达式求值
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; } }