Leetcode---逆波兰表达式求值--栈

本文详细介绍了如何使用栈结构解决逆波兰表达式的求值问题。通过遍历字符串数组,遇到数字则入栈,遇到操作符则出栈两个元素进行计算并重新入栈。最后栈中剩余的唯一元素即为计算结果。

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

逆波兰表达式求值

题目链接:添加链接描述

思路:

逆波兰式是典型的运用栈结构进行运算的
不仅仅此处使用栈结构求解,包括构造一个逆波兰式也是使用栈结构构成的,对于构造逆波兰式,此处不做多余的说明
整个流程很简单,遍历整个string数组,碰到的是数字就入栈,碰到的是字符,就出栈两个数作为操作数进行运算,这里需要注意两个数字的操作次序,比如0/3不要写成3/0
最终遍历完整个数组,栈当中也必然只含有一个最终结果值,直接输出即可
这里程序可以做进一步优化,就是栈中不存放字符串,这样操作较麻烦,首先就将字符串转为整数较方便。

	public int evalRPN(String[] tokens) {
		Stack<String> stack = new Stack<String>();
		for(int i=0;i<tokens.length;i++) {
			switch(tokens[i]) {
				case "+":{
					String op1 = stack.pop();
					String op2 = stack.pop();
					stack.push(new Integer(Integer.parseInt(op2)+Integer.parseInt(op1)).toString());
					break;
				}
				case "-":{
					String op1 = stack.pop();
					String op2 = stack.pop();
					stack.push(new Integer(Integer.parseInt(op2)-Integer.parseInt(op1)).toString());
					break;
				}
				case "*":{
					String op1 = stack.pop();
					String op2 = stack.pop();
					stack.push(new Integer(Integer.parseInt(op2)*Integer.parseInt(op1)).toString());
					break;
				}
				case "/":{
					String op1 = stack.pop();
					String op2 = stack.pop();
					stack.push(new Integer(Integer.parseInt(op2)/Integer.parseInt(op1)).toString());
					break;
				}
				default:{
					stack.push(tokens[i]);
				}
			}
		}
		return Integer.parseInt(stack.pop());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值