算法题018 -- [Evaluate Reverse Polish Notation] by java

本文介绍了一种基于反向波兰表示法计算算术表达式的算法实现,通过使用栈结构来解析并计算由整数和四则运算符组成的表达式。有效运算符包括+、-、*、/,算法遍历表达式,遇到数字则压入栈中,遇到运算符则从栈中弹出两个数进行计算,并将结果再次压入栈中,直至栈中只剩下一个最终的计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

在反向波兰表示法中计算算术表达式的值。
有效的运算符是+, - ,*,/。 每个操作数可以是整数或另一个表达式。

举例
  ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

分析

其实就是计算符号前相邻两个数的值,再push进入stack,直到循环结束,stack中只会存在一个最终计算的值。
具体思路,以 ["2", "1", "+", "3", "*"]为例:
stack: 2 -> 1,2; 遍历到+,那么pop1,2,相加值为3,将3push进入stack,继续遍历,stack: 3,3;遍历到*,取出stack中的数3,3,相乘值为9,将结果pushstack,继续遍历时发现,数组已经走完了,最后再将stack中的值pop出来。

代码

package algorithm018;

import java.util.Stack;

public class Algorithm018 {

	public static void main(String[] args) {
//		  ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
//		  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
		
		String[] test1 = {"2", "1", "+", "3", "*"};
		System.out.println(evalRPN(test1));
		String[] test2 = {"4", "13", "5", "/", "+"};
		System.out.println(evalRPN(test2));
	}
	
	public static int evalRPN(String[] test) {
		String pattern = "+-*/";
		String operation1 = "+";
		String operation2 = "-";
		String operation3 = "*";
		String operation4 = "/";
		Stack<Integer> stack = new Stack<>();
		for(String s : test) {
			if(!pattern.contains(s)) {
				Integer i = Integer.parseInt(s);
				stack.push(i);
			}else {
				Integer b = stack.pop();
				Integer a = stack.pop();
				Integer c = 0;
				if(s.equals(operation1)) {
					c = a + b;
				}else if(s.equals(operation2)) {
					c = a - b; 
				}else if(s.equals(operation3)) {
					c = a * b;
				}else {
					c = a / b;
				}
				stack.push(c);
			}
		}
		return stack.pop();
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值