刷题——逆波兰表达式

文章目录


题目描述:
根据 逆波兰表示法,求表达式的值。

有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
在这里插入图片描述
简单分析:
所谓逆波兰表达式,就是将标准的算数表达式进行变形,方法很简单,以括号为界,由内及外,在括号中,先运算符左边的数字取出,在取出右边数字,最后在取出运算符,以此类推。

简单思路
1.首先定义一个栈来存放数据,只要不是运算符号就存入。
2.当遇到运算符号时,分别取出两个值,先后依次作为操作数和操作数,再将其结果存入栈中用于之后运算。

这里需要注意栈的特点时先入后出。
如图:
在这里插入图片描述
如此循环,直到数组遍历完全,返回数组中最后一个值,即为最终结果。

代码如下:

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for(int i = 0;i < tokens.length;i++){
            if(!isOperations(tokens [i])){
                stack.push(Integer.parseInt(tokens [i]));
            }else{
            //这里实现左右操作数的正确传入。
                int num2 = stack.pop();
                int num1 = stack.pop();
                switch(tokens [i]){
                    case "+":
                        stack.push(num1+num2);
                        break;
                    case "-":
                        stack.push(num1-num2);
                        break;
                    case "*":
                        stack.push(num1*num2);
                        break;
                    case "/":
                        stack.push(num1/num2);
                        break;
                }
            }
        }
        return stack.pop();
    }
    //自定义一个方法,用来判断传入的是否为运算符
    private boolean isOperations(String s){
        if(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")){
            return true;
        }
        return false;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值