题解 | 表达式求值
表达式求值
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
s = s.trim();
if(s == "") return 0;
int number = 0;
char sign = '+';
Stack<Integer> stack = new Stack<Integer>();
char[] chs = s.toCharArray();
for(int i =0;i<chs.length;i++){
if(Character.isDigit(chs[i])){
number = Integer.parseInt(String.valueOf(number) + String.valueOf(chs[i]));
}
if(chs[i] == '('){
int j = i+1;
int count = 1;
while(count>0){
if(chs[j] == '('){
count++;
}
if(chs[j] == ')'){
count--;
}
j++;
}
number = solve(s.substring(i+1,j-1));
i = j-1;
}
if(!Character.isDigit(chs[i]) || i == chs.length-1){
if(sign == '+'){
stack.push(number);
}else if(sign == '-'){
stack.push((-1) * number);
}else if(sign == '*'){
stack.push(stack.pop() * number);
}else if(sign == '/'){
stack.push(stack.pop() / number);
}
number = 0;
sign = chs[i];
}
}
int result = 0;
while(!stack.isEmpty()) result += stack.pop();
return result;
}
}

查看7道真题和解析