原题
求下方表达式的值
(1 + ((2 + 3) * (4 * 5)))
这道题在leetcode上有相似的题目逆波兰表达式求值
解题思路
我们可以通过双栈的方式来解这道题。
- 遍历整个字符串,一个栈负责将操作数压入栈,另外一个栈负责将运算符压入栈。
- 当遇到
(
时直接忽略,当遇到)
时,对栈顶两个操作数进行运算。
代码
import java.util.Stack;
public class Evaluate {
public static void main(String[] args) {
Stack<String> ops = new Stack<String>();
Stack<Double> vals = new Stack<Double>();
String str = "(1 + ((2 + 3) * (4 * 5)))"
for(String s: str) {
if (s.equals("("));
else if(s.equals("+")) ops.push(s);
else if(s.equals("-")) ops.push(s);
else if(s.equals("*")) ops.push(s);
else if(s.equals("/")) ops.push(s);
else if(s.equals(")")){
Double v = vals.pop()
String p = ops.pop()
if (p == "+") v = vals.pop() + v;
else if(p == "-") v = vals.pop() - v;
else if(p == "*") v = vals.pop() * v;
else if(p == "/") v = vals.pop() / v;
}
}
else vals.push(Double.parseDouble(s));
}
StdOut.println(vals.pop());
}
}