您将如何有效地(针对运行时进行优化,同时将空间保持在最低限度)解析和评估 Java 中的一位数算术表达式。
以下算术表达式都是有效的:
eval("-5")=-5
eval("+4")=4
eval("4")=4
eval("-7+2-3")=-8
eval("5+7")=12
我的方法是遍历所有元素,使用标志跟踪当前算术运算,并逐位评估。
public int eval(String s){
int result = 0;
boolean add = true;
for(int i = 0; i < s.length(); i++){
char current = s.charAt(i);
if(current == '+'){
add = true;
} else if(current == '-'){
add = false;
} else {
if(add){
result += Character.getNumericValue(current);
} else {
result -= Character.getNumericValue(current);
}
}
}
return result;
}
这是唯一的最佳解决方案吗?我曾尝试使用堆栈来跟踪算术运算符,但我不确定这是否更有效。我也没有尝试过正则表达式。我之所以问,是因为我在一次采访中给出了上述解决方案,并被告知这是次优的。