欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode -- 150. 逆波兰式表达式求值

程序员文章站 2022-04-04 09:52:30
...

LeetCode -- 150. 逆波兰式表达式求值
LeetCode -- 150. 逆波兰式表达式求值
概念:可以用平常习惯的中缀表达式画出语法树,前序遍历语法树就得到前缀表达式,也叫波兰式。后序遍历语法树就得到后缀表达式,也叫逆波兰式。
LeetCode -- 150. 逆波兰式表达式求值
后缀表达式(逆波兰式):ABCD-x+EFx-

解题思路:通过栈解。
当遇到符号时,从栈中pop出两个数字计算,否则将数字进栈。

public int evalRPN(String[] tokens){
	Stack<Integer> stack = new Stack<>();
	for (String s:tokens) {
		if (s.equals("+"))
			stack.push(stack.pop() + stack.pop());
		else if (s.equals("-"))
			stack.push(- stack.pop() + stack.pop());
		else if (s.equals("*"))
			stack.push(stack.pop() * stack.pop());
		else if (s.equals("/")) {
			int num1 = stack.pop();
			stack.push(stack.pop() / num1);
		}else
			stack.push(Integer.parseInt(s));
	}
	return stack.pop();
}