LeetCode每日1题--逆波兰表达式求值

简介: LeetCode每日1题--逆波兰表达式求值

前言


算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image.png


刷题网站


代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!


画图软件


OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!


笔记软件


Typoral


题目


image.png


解析


什么事逆波兰表达式呢?

一图胜千言:


https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1c1ef9ab1d26434780425d169405d5c6~tplv-k3u1fbpfcp-zoom-in-crop-mark:4536:0:0:0.awebp


  1. 这题和前面做的消除字母不是差不多嘛,那一题是消除字母,这里是做运算,哎呦,思路很一致
  2. 在仔细想一想,什么时候做运算呢?当然是遇到运算符的时候做运算,昨晚运算之后呢再把运输后的结果放入栈中
  3. 哎呦,经过简单的分析是不是很清晰了呢?那下面我们来写代码吧!
  1. 声明栈 Deque stack = new LinkedList();
  2. 遍历数组 for (int i = 0; i < tokens.length; ++i) {}
  3. 如果碰见+号了,那么弹出两个元素,把它们相加的和放到栈中

if ("+".equals(tokens[i])) { stack.push(stack.pop() + stack.pop());   }

4.其余运算符和加法的逻辑是一样的

else if ("-".equals(tokens[i])) { 
    stack.push(-stack.pop() + stack.pop());  
      } else if ("*".equals(tokens[i])) {  
        stack.push(stack.pop() * stack.pop());

  1. 除法的不太一样哦,我们来分析下除法的逻辑


int temp1 = stack.pop();
                int temp2 = stack.pop();
                stack.push(temp2 / temp1);
  1. 遇见正常的树就把它转换为integer类型放入栈中即可


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

虽然这几天的提示比较简单的,但是我们不能掉以轻心,后面也会有中等题



相关文章
|
6月前
|
算法 Go
golang力扣leetcode 399.除法求值
golang力扣leetcode 399.除法求值
56 0
|
4月前
|
算法 测试技术
力扣经典150题第五十五题:逆波兰表达式求值
力扣经典150题第五十五题:逆波兰表达式求值
47 1
|
6月前
|
索引
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
50 0
|
6月前
leetcode代码记录(逆波兰表达式求值
leetcode代码记录(逆波兰表达式求值
36 0
|
6月前
|
存储 人工智能 BI
leetcode 399 除法求值
leetcode 399 除法求值
34 1
|
6月前
|
Java
LeetCode题解-逆波兰表达式求值-Java
逆波兰表达式求值-Java
29 0
|
6月前
|
Go
golang力扣leetcode 150.逆波兰表达式求值
golang力扣leetcode 150.逆波兰表达式求值
38 0
|
6月前
|
存储 算法 vr&ar
☆打卡算法☆LeetCode 150. 逆波兰表达式求值 算法解析
☆打卡算法☆LeetCode 150. 逆波兰表达式求值 算法解析
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
106 2