第150题题解:逆波兰表达式

思路

150. 逆波兰表达式求值
使用leetcode做的第一题,借助栈来解决问题,思路如下

使用双端队列来表示栈:Deque stack = new LinkedList<>();遍历数组,使用switch语句对数组中的每一个字符进行判断,遇到数字就压入栈,遇到运算符就把栈中的二个数组弹出并进行相应运算,然后把结果再入栈,直到数组遍历完,输出栈中最后的数字,这就是结果。

此外还有另外一种思路:用数组来模拟栈

注意

加法和乘法没有顺序,减法和除需要注意先后问题

代码:

方法一:使用栈
//运行时间:7 ms  内存消耗:38.3 MB
class Solution {
    public int evalRPN(String[] tokens) {
          Deque<Integer> stack = new LinkedList<>();
		  for(String token : tokens){
			  switch(token){
				  case "+":
					  stack.push(stack.pop() + stack.pop());
					  break;
				  case "-":
					  stack.push(-stack.pop() + stack.pop());
					  break;
				  case "*":
					  stack.push(stack.pop() * stack.pop());
					  break;
				  case "/":
					  Integer temp = stack.pop();
					  stack.push(stack.pop()/temp);
					  break;
				  default:
					  stack.push(Integer.parseInt(token));
					  break;
			  }
			  
		  }
		return stack.pop();
    }
}
方法二:使用数组模拟栈
//运行时间:3 ms  内存消耗:38.5 MB
class Solution {
	//纯数组模拟栈实现(推荐)  
	public static int evalRPN(String[] tokens) {
		int[] numStack = new int[tokens.length / 2 + 1];
		int index = 0;
		for (String s : tokens) {
			switch (s) {
			case "+":
				numStack[index - 2] += numStack[--index];
				break;
			case "-":
				numStack[index - 2] -= numStack[--index];
				break;
			case "*":
				numStack[index - 2] *= numStack[--index];
				break;
			case "/":
				numStack[index - 2] /= numStack[--index];
				break;
			default:
				// numStack[index++] = Integer.valueOf(s);
				//valueOf改为parseInt,减少自动拆箱装箱操作
				numStack[index++] = Integer.parseInt(s);
				break;
			}
		}
		return numStack[0];
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值