当前位置: 首页 > news >正文

Leetcode——150. 逆波兰表达式求值

题解一

思路

和上一期1047. 删除字符串中的所有相邻重复项没差太多,基本思想都一样,就是读取输入的数据,如果是运算符,就进行相应的运算,然后把运算结果压栈。

代码

class Solution {
    public int evalRPN(String[] tokens) {
        Deque<Integer> stack = new ArrayDeque<>();
        for(String str : tokens){
            if("+".equals(str)){
                stack.push(stack.pop() + stack.pop());
            }
            else if("-".equals(str)){
                stack.push(-stack.pop() + stack.pop());
            }
            else if("*".equals(str)){
                stack.push(stack.pop() * stack.pop());
            }
            else if("/".equals(str)){
                int temp1 = stack.pop();
                int temp2 = stack.pop();
                stack.push(temp2 / temp1);
            }
            else{
                stack.push(Integer.parseInt(str));
            }
        }
        return stack.pop();
    }
}

总结

这里面的判断条件,看Carl的代码随想录里说,Leetcode里面的内置jdk有问题,如果写“+” == str会报错,我测试了一下,确实是这样的,在IDEA里“+” == str是可以正常运行的。

这道题第一次没想到这个做法,因为与上一道题隔了一段时间去做,第一反应是把所有数组元素全部压进栈中,然后进行运算,反正思路很奇怪,因为在运算过程中可能会出现连消的效果(像那个祖玛一样),和中邪了一样疯狂想用递归求出结果哈哈哈,下面是碰壁了的代码。

import java.util.ArrayDeque;
import java.util.Deque;

public class Solution {
    public int evalRPN(String[] tokens) {
        Deque<String> stack = new ArrayDeque<>();
        for (String str : tokens) {
            stack.push(str);
            calculate(stack);
        }
        return Integer.parseInt(stack.pop());

    }

    public void calculate(Deque stack) {
        int a = 0;
        int b = 0;
        String temp = "";
        try {
            temp = (String) stack.pop();
            a = Integer.parseInt(temp);
        } catch (NumberFormatException e) {
            stack.push(temp);
            return;
        }
        try {
            if (!stack.isEmpty()) {
                temp = (String) stack.pop();
                b = Integer.parseInt(temp);
            }
        } catch (NumberFormatException e) {
            stack.push(temp);
            return;
        }
        if (!stack.isEmpty()) {
            temp = (String) stack.pop();
        }

        if (temp.equals("+")) {
            int result = a + b;
            stack.push(String.valueOf(result));
        } else if (temp.equals("-")) {
            int result = a - b;
            stack.push(String.valueOf(result));
        } else if (temp.equals("*")) {
            int result = a * b;
            stack.push(String.valueOf(result));
        } else {
            int result = a / b;
            stack.push(String.valueOf(result));
        }

        calculate(stack);
    }
}

http://www.dtcms.com/a/111347.html

相关文章:

  • 【小沐杂货铺】基于Three.JS绘制三维数字地球Earth(GIS 、three.js、WebGL、vue、react)
  • 平台总线---深入分析
  • transforms-pytorch4
  • 要素的选择与转出
  • 阿里云服务器遭遇DDoS攻击有争议?
  • 在MacOS 10.15上使用MongoDB
  • 洛谷题单3-P4956 [COCI 2017 2018 #6] Davor-python-流程图重构
  • linux signal up/down/down_interruptiable\down_uninterruptiable使用
  • 机器视觉工程师的专业精度决定职业高度,而专注密度决定成长速度。低质量的合群,不如高质量独处
  • linux 命令 awk
  • 洛谷题单3-P1217 [USACO1.5] 回文质数 Prime Palindromes-python-流程图重构
  • eBay新规倒计时:您的店铺配送方案即将被系统默认修改
  • python如何快速删除文件夹中的大量文件
  • 内网(域)渗透测试流程和模拟测试day--5--Windows和Linux的提权
  • 通信数据记录仪-产品概念ID
  • IntelliJ IDEA 2020~2024 创建SpringBoot项目编辑报错: 程序包org.springframework.boot不存在
  • 人工智能时代人才培养的变革路径:模式创新、能力重塑与认证赋能
  • Hello Robot创新突破!Stretch3机器人搭载RUMs模型实现未知环境中“即插即用”
  • 【AI模型核心流程】(一)大语言模型输入处理机制详解与常见误解辨析
  • leetcode75.颜色分类
  • 对备忘录模式的理解
  • vulkanscenegraph显示倾斜模型(5.6)-vsg::RenderGraph的创建
  • Python 助力人工智能与机器学习的深度融合
  • Linux如何设置bash为默认shell
  • AIGC9——​AIGC时代的用户体验革命:智能交互与隐私保护的平衡术
  • Linux线程同步与互斥:【线程互斥】【线程同步】【线程池】
  • JavaScript BOM、事件循环
  • 解锁 C 语言安全新姿势:C11 安全函数全解析
  • 合肥SMT贴片制造工艺全解析
  • React编程高级主题:背压(Backpressure)处理