【LeetCode】150. 逆波兰表达式求值(ASCII码)

news/2025/3/29 2:56:08/

  今日学习的文章链接和视频链接

leetcode题目地址:150. 逆波兰表达式求值

 代码随想录题解地址:代码随想录

题目简介

即将后缀表达式转换成中缀表达式并计算。

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

看到题目的第一想法(可以贴代码)

1. 逆波兰表达式主要有以下两个优点:

  • 去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。
  • 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。
public int evalRPN(String[] tokens) {Stack<String> st = new Stack<>();for (String i : tokens){if (i.charAt(0)>=48 && i.charAt(0)<=57 || i.charAt(0)=='-' && i.length() != 1){st.push(i);}else if (i.charAt(0)=='+'){int num1 = Integer.parseInt(st.pop());int num2 = Integer.parseInt(st.pop());int sum = num1 + num2;st.push(Integer.toString(sum));}else if (i.charAt(0)=='-' && i.length() == 1){int num1 = Integer.parseInt(st.pop());int num2 = Integer.parseInt(st.pop());int sum = num2 - num1;st.push(Integer.toString(sum));}else if (i.charAt(0)=='*'){int num1 = Integer.parseInt(st.pop());int num2 = Integer.parseInt(st.pop());int sum = num1 * num2;st.push(Integer.toString(sum));}else if (i.charAt(0)=='/'){int num1 = Integer.parseInt(st.pop());int num2 = Integer.parseInt(st.pop());  int sum = num2 / num1;st.push(Integer.toString(sum));}}return Integer.parseInt(st.pop());
}

实现过程中遇到哪些困难

看完代码随想录之后的想法

【解题思路】利用栈解,与我的一致,但用的是Deque。

【想法】

1. 好像一般都用Deque-LinkedList数据类型而不用Stack。

2. 先判定加减乘除更快。

看完视频自己写的ACC:

public int evalRPN(String[] tokens) {Deque<Integer> st = new LinkedList<>();for (String i : tokens){if (i.equals("+")){st.push(st.pop()+st.pop());}else if (i.equals("-")){st.push(-st.pop()+st.pop());}else if (i.equals("*")){st.push(st.pop()*st.pop());}else if (i.equals("/")){int temp1 = st.pop();int temp2 = st.pop();st.push(temp2/temp1);}else {st.push(Integer.valueOf(i));}}return st.pop();
}

学习时长


今日收获

1. ASCII码:

空格(32)

圆括号、加减乘除(40~47)

0~9(48~57)

A~B(65~90)

a~b(97~122)

2. String转char和int

 1 如何将字串 String 转换成整数 int ?
  • 1、 int i = Integer.parseInt([String]);
  • 2、 int i = Integer.valueOf(my_str).intValue();

注: 字串转成 Double, Float, Long 的方法大同小异.

2 如何将整数 int 转换成字串 String ?
  • 1、String s = String.valueOf(i);
  • 2、String s = Integer.toString(i);
  • 3、String s = "" + i;

 注: Double, Float, Long 转成字串的方法大同小异.

3. 关于String的加法

        String a = "12";

        String b = "13";

        System.out.println(a+b);        //输出1213而不是25


http://www.ppmy.cn/news/1291941.html

相关文章

[C#]C# OpenVINO部署yolov8图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来&#xff0c;领域内的研究者们…

计算机网络——网关或代理

1. 网关或代理的概念 网络中的代理服务器&#xff08;proxy&#xff09;或网关&#xff08;passerelle&#xff09;的概念。 在OSI模型的各个层次中&#xff0c;代理或网关充当中间实体&#xff0c;可以在不同的层次上提供连接和转发功能。 2. 代理或网关工作层次 在这种配置中…

opengl和directx中,渲染管线是什么?

在opengl 3D画图&#xff08;渲染或图像处理&#xff09;中&#xff0c;很多人都围绕着一个pipeline的词做很多解释&#xff0c;似乎明白这个词的含义成了入门必须要领悟的一道门槛。但实际上呢&#xff1f; 这都是因为翻译错误搞得大家非要解释一番的。好好的翻译工具不用&am…

Windows找不到文件‘chrome‘,请确定文件名是否正确后,再试一次。

本文主要记录遇到vscode运行HTML文件提示&#xff1a; Windows找不到文件‘chrome‘&#xff0c;请确定文件名是否正确后&#xff0c;再试一次。问题的解决办法。 目录 一、打开设置 二 、搜索Live Server Config &#xff08;1&#xff09;安装Live Server插件 &#xff0…

网络安全试题进阶——附答案

选择题 什么是CSRF攻击的全称&#xff1f; A. Cross-Site Request ForgeryB. Cross-Site ScriptingC. Credential Sniffing and Retrieval ForceD. Cyber Security and Risk Framework 哪种安全攻击利用用户的社交工程&#xff0c;诱使他们点击似乎是合法链接的恶意链接&#x…

MySQL数据管理(一)

一、列类型 列类型指规定数据库中该列存放的数据类型 列类型分类 数值类型字符串类型日期和时间型数值类型 数值类型 字符串类型 日期和时间类型 MySQL允许“不严格”语法&#xff0c;任何标点符号都可以作为日期部分之间的间隔符&#xff0c;如“24-01-03”、“24.01.03”…

使用KVM命令集管理虚拟机

1、KVM基本功能管理 1&#xff09;查看命令帮助 [rootlocalhost ~]# virsh -h ......//省略输出内容 2&#xff09;查看KVM的配置文件存放目录&#xff08;rhel7.1是虚拟机系统实例的配置文件&#xff09; [rootlocalhost ~]# ls /etc/libvirt/qemu autostart networks r…

百度编辑器常用设置

1、创建编辑器 UE.getEditor(editor, { initialFrameWidth:"100%" //初始化选项 }) 精简版 UE.getEditor(editor) 2、删除编辑器 UE.getEditor(editor).destroy(); 3、使编辑器获得焦点 UE.getEditor(editor).focus(); 4、获取编辑器内容 UE.getEditor(editor).getCo…