代码编织梦想

文章目录


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

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

简单思路
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;
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_62905847/article/details/127177697

Leecode刷题笔记——150. 逆波兰表达式求值-爱代码爱编程

思路如下: 考虑采用栈进行求解 class Solution { public int evalRPN(String[] tokens) { Stack<String> stack=new Stack<>(); for(int i=0;i<tokens.length;i++){

刷题计划——栈算法(三)-爱代码爱编程

150. 逆波兰表达式求值(中等) 题目: 根据逆波兰表示法,求表达式的值。 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数部分;给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1: 输入: ["2", "1", "+",

LeetCode刷题笔记——逆波兰表达式求值-爱代码爱编程

LeetCode刷题笔记——逆波兰表达式求值 题目 根据 逆波兰表示法,求表达式的值。 有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。 示例 1: 输入:token

力扣刷题150:逆波兰表达式求值C++-爱代码爱编程

解题思路 逆波兰表达式: 1.需要一个栈存储操作数,遇到操作数把它入栈 2.遇到操作符,把数出栈,右操作数先出,左操作数后出,运算后再入栈 atoi()函数的功能:将字符串转换成整型数; atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时(’\0’)才结束转化,并将结果返回(返回转换后的

LeetCode刷题——栈和队列2-爱代码爱编程

LeetCode刷题——栈和队列2 逆波兰表达式求值滑动窗口最大值前 K 个高频元素 逆波兰表达式求值 题目链接题意:根据逆波兰表示法(后缀表达式),求表达式的值。思路:一般a+b表达式是中缀表达式的形式,ab+就是后缀表达式的的形式。遍历字符串,用栈存数字,遇到运算符的时候,对栈顶部的两个元素进行相应的操作,弹出这两个数字,将他们的结果存入

leetcode刷题——栈与队列-爱代码爱编程

20. 有效的括号 # 方法一,仅使用栈,更省空间 stack = [] for item in s: if item == '(': stack.append(')') elif item == '[':

2022.2.3 LeetCode——后缀表达式-爱代码爱编程

文章目录 一、今日刷题1. 第四部分:栈与递归 -- 150. 逆波兰表达式求值二、知识积累1.逆波兰式(后缀表达式):2.中缀表达式转为后缀表达式:3.逆波兰表达式求值: 一、今日刷题 1. 第四部分:栈与递归 – 150. 逆波兰表达式求值 跳转LeetCode 根据 逆波兰表示法,求表达式的值。 有效的算符包括 +、-、*、/ 。

LeetCode刷题——逆波兰表达式求值#150#Medium-爱代码爱编程

逆波兰表达式求值的思路探讨与源码     逆波兰表达式求值的题目如下图,该题属于栈和数组类型的题目,主要考察对于栈的使用和栈结构原理的理解。本文的题目作者想到2种方法,分别是数组模拟栈方法和列表模拟方法,其中数组模拟栈方法使用Java进行编写,而列表模拟方法使用Python进行编写,当然这可能不是最优的解法,还希望各位大佬给出更快的算法。     本人认为

leetcode刷题题解——150. 逆波兰表达式求值-爱代码爱编程

public int evalRPN(String[] tokens) { Stack<Integer> stack = new Stack<>(); int result; for (String token : tokens) { if (token.len

LeetCode刷题——栈(python语言)-爱代码爱编程

LeetCode刷题——栈(python语言) 一、栈 1.1 定义 栈(Stack):也称堆栈。一种线性表数据结构,是一种只允许在表的一端进行插入和删除操作的线性表。 我们把栈中允许插入和删除的一端称为[栈顶(top)];另一端则称为[栈底(bottom)]。当表中没有任何数据元素时,称之为[空栈]。 栈的特点: 线性表后进先出 栈的存储方式有顺

刷题总结——数据结构基础-爱代码爱编程

2022/3/6 1.leetcode136只出现一次的数字。 位运算。注意异或运算三个性质。 异或运算有以下三个性质。     任何数和 000 做异或运算,结果仍然是原来的数,即 a⊕0=a。     任何数和其自身做异或运算,结果是 000,即 a⊕a=0。     异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕

数据结构刷题——栈(下)_std i hurt o love的博客-爱代码爱编程

一、逆波兰表达式求值 解法:栈 逆波兰表达式求值的过程总是先列出运算符前面两个数字,然后将这两个数字进行相应运算,得到一个新的数字,这个数又与后面的数进行相应运算,直到结束。 所以,可以先新建一个栈,当遇到数字时,直接

代码随想录栈与队列——逆波兰表达式求值_hdu-五七小卡的博客-爱代码爱编程

题目 根据 逆波兰表示法,求表达式的值。 示例 1: 输入: [“2”, “1”, “+”, “3”, " * "] 输出: 9 解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9 示