题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */ public int solve (String s) { // write code here Map<String,Integer> res= func(s,0); return res.get("num"); } public Map<String,Integer> func(String s,int index){ Stack<Integer> st = new Stack<Integer>(); int num = 0; char op = '+'; int i; for(i = index;i< s.length();i++){ if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){ num = num * 10+ s.charAt(i) - '0'; if(i != s.length() - 1){ continue; } } if(s.charAt(i) == '('){ Map<String,Integer> res = func(s,i + 1); num = res.get("num"); i = res.get("i"); if(i != s.length() - 1){ continue; } } switch(op){ case '+': st.push(num); break; case '-': st.push(-num); break; case '*': int temp = st.pop(); st.push(temp * num); break; } num = 0; if(s.charAt(i) == ')'){ break; }else{ op = s.charAt(i); } } int sum = 0; while(!st.isEmpty()){ sum += st.pop(); } Map<String,Integer> temp = new HashMap<>(); temp.put("num",sum); temp.put("i",i); return temp; } }