Leetcode 150.逆波兰表达式求值(栈) 记录反思

在这里插入图片描述
后缀表达式,遇到一个运算符的话,就选取运算符前面两个值计算然后放回,这个后缀表达式不需要括号就能起到优先计算的功能.

思路的话就是:
每次遇到两个数在栈中取出两个数计算然后放回栈中

       public int evalRPN(String[] tokens) {
        Deque<Integer> sk = new LinkedList();
        for (int i = 0; i < tokens.length; ++i) {
            if ("+".equals(tokens[i])) {        // leetcode 内置jdk的问题,不能使用==判断字符串是否相等
                stack.push(sk.pop() + sk.pop());      // 注意 - 和/ 需要特殊处理
            } else if ("-".equals(tokens[i])) {
                stack.push(-sk.pop() + sk.pop());
            } else if ("*".equals(tokens[i])) {
                stack.push(sk.pop() * sk.pop());
            } else if ("/".equals(tokens[i])) {
                int temp1 = sk.pop();
                int temp2 = sk.pop();
                stack.push(temp2 / temp1);
            } else {
                sk.push(Integer.valueOf(tokens[i]));
            }
        }
        return sk.pop();
    }

这里不得不提出一个问题.
Deque 和 stack ,为什么选用 Deque ,之前我一直用的都是stack,然后上网查了一下,jdk文档不推荐使用stack ,相比于stack里面太多的无所谓的东西,deque完成了stack的所有功能,而且本身是一个接口,非常的纯洁,效率比stack也要高一点(感觉上,stack跑起来8ms,deque跑起来5ms)

就这样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值