美文网首页
No.3.栈-evaluate-reverse-polish-n

No.3.栈-evaluate-reverse-polish-n

作者: 山枫叶纷飞 | 来源:发表于2019-05-10 19:32 被阅读0次

牛客网的题目链接

题目描述

Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are+,-,*,/. Each operand may be an integer or another expression.

Some examples:

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

注意点

可能存在输入值为负数的情况!其余的就按照后缀表达式来计算就OK了!
开两个栈,数字栈满2和字符串栈不为空就进行一次运算,运算出结果后还放回数字栈!就酱~~
Java语法写蒜法有点头疼,很多数值转换不如C/C++来的方便,多写写习惯了可能就好了.

题解,仅供参考

import java.util.Stack;
public class Solution {
    public int evalRPN(String[] tokens) {
        int ans=0;
        //操作符栈
        Stack<String> op = new Stack<>();
        //数字栈
        Stack<String> num = new Stack<>();
        String opList = "+-*/";

        for(int i=0;i<tokens.length;i++){
            char ch = tokens[i].charAt(0);

            if(tokens[i].length()==1&&opList.indexOf(tokens[i].charAt(0))!=-1){
                op.push(tokens[i]);
            }
            else{
                num.push(tokens[i]);
            }


            //当数字>=2 并且 op栈>=1 时进行计算
            while(op.size()>=1&&num.size()>=2){
                Integer integer1 = new Integer(num.pop());
                Integer integer2 = new Integer(num.pop());

                int index = opList.indexOf(op.pop());
                switch (index){
                    case 0:
                        num.push( String.valueOf(integer1+integer2));
                        break;
                    case 1:
                        num.push( String.valueOf(integer2-integer1));
                        break;
                    case 2:
                        num.push( String.valueOf(integer1*integer2));
                        break;
                    case 3:
                        num.push( String.valueOf(integer2/integer1));
                        break;
                    default:
                        break;
                }
            }
        }
        ans = Integer.valueOf(num.pop());
        return ans;
    }
}

相关文章

  • No.3.栈-evaluate-reverse-polish-n

    牛客网的题目链接 题目描述 Evaluate the value of an arithmetic express...

  • No.3.羽毛槭

    飞羽着红如火凤,散入两道迎贵宾。

  • Java实现栈

    数组栈:压栈、出栈、返回栈顶元素 链式栈:压栈、出栈、返回栈顶元素

  • 数据结构之 栈

    栈结构 链式栈 一.栈结构体 1构建空栈 2栈置空 3判断栈空 4获取栈顶 5入栈 6出栈 7便利栈 二.链式栈 ...

  • 【JS攻略Leetcode】No.3. Longest Subs

    引言:用Js攻略leetcode中的算法,将会介绍自己的思路和注意点,一边学习一边愉快刷题呀。 问题: 给定一个字...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 递归累加数组

    入栈 5入栈 4入栈 3入栈 2入栈 1出栈 [1 0]出栈 [2 1 0]出栈 [3 2 1 0]出栈 [4 3...

  • 栈的逻辑结构和存储结构

    main()进栈s(1)进栈s(0)进栈 s(0)出栈s(1)出栈main()出栈 顺序栈 一个数组 + 指向栈顶...

  • 单调栈 2020-06-12(未经允许,禁止转载)

    1.单调栈 指栈内元素保持单调性的栈结构,分为单调增栈(栈底到栈顶元素递增)和单调减栈(栈底到栈顶元素递减) 2....

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

网友评论

      本文标题:No.3.栈-evaluate-reverse-polish-n

      本文链接:https://www.haomeiwen.com/subject/qjdzoqtx.html