【算法与数据结构】150、LeetCode逆波兰表达式求值

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、解法

  思路分析:我们常看见的表达式是中缀表达式(关于中缀表达式的定义可以参考前缀、中缀、后缀表达式),中缀表达式比较符合我们的习惯,但对于计算机来说不是特别友好:计算机需要从左到右扫描,然后还有比较优先级,做完部分运算后还可能要回退。那么将中缀表达式,转化为后缀表达式之后,就不一样了,计算机可以利用栈来顺序处理,不需要考虑优先级了。也不用回退了, 所以后缀表达式对计算机来说是非常友好的。程序当中用到的stoll函数,用来将字符串转成int类型。
  程序如下

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;int num1 = 0, num2 = 0;for (int i = 0; i < tokens.size(); ++i) {if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "/" || tokens[i] == "*") {num1 = st.top();st.pop();num2 = st.top();st.pop();if (tokens[i] == "+") st.push(num1 + num2);else if (tokens[i] == "-") st.push(num2 - num1);else if (tokens[i] == "/") st.push(ceil(num2 / num1));	else st.push(num1 * num2);}else {st.push(stoll(tokens[i]));}}return st.top();}
};

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

三、完整代码

# include <iostream>
# include <stack>
# include <string>
# include <vector>
# include <cmath>
using namespace std;class Solution {
public:int evalRPN(vector<string>& tokens) {stack<long long> st;long long num1 = 0, num2 = 0;for (int i = 0; i < tokens.size(); ++i) {if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "/" || tokens[i] == "*") {num1 = st.top();st.pop();num2 = st.top();st.pop();if (tokens[i] == "+") st.push(num1 + num2);else if (tokens[i] == "-") st.push(num2 - num1);else if (tokens[i] == "/") st.push(ceil(num2 / num1));	else st.push(num1 * num2);}else {st.push(stoll(tokens[i]));}}return st.top();}
};int main()
{Solution s1;//vector<string> v = { "2", "1", "+", "3", "*" };vector<string> v = { "10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+" };	//vector<string> v = { "4", "13", "5", "/", "+" };	int result = s1.evalRPN(v);cout << "result = " << result <<endl;system("pause");return 0;
}

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19249.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化学习快速复习笔记--待更新

目录 蒙特卡洛方法动态规划算法策略迭代 时序差分方法Sarsa算法Q-learning算法如何区分在线学习和离线学习DQN深度强化Q学习概念介绍代码解析 DQN改进算法Double DQN网络 蒙特卡洛方法 求解价值函数和状态价值函数&#xff0c;可以使用蒙特卡洛方法和动态规划。首先介绍一下蒙…

从零开始的前后端分离项目学习(前后端从零环境搭建)

一、 前后端分离介绍&#xff1a; 前端独立编写客户端代码&#xff08;用户交互数据展示&#xff09;&#xff0c;后端独立编写服务端代码&#xff08;提供数据处理接口&#xff09;&#xff0c;并提供数据接口就行。 前端通过Ajax访问后端数据借口&#xff0c;将model展示到…

数据结构05:树与二叉树[C++][哈夫曼树HuffmanTree]

图源&#xff1a;文心一言 小白友好、代码可跑&#xff0c;但是不一定适合考研~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、画导图、画配图~&#x1f9e9;&#x1f9e9; 参考用书&#xff1a;王道考研《2024年 数据结构考研复习指导》 参考用书配套视频&#xf…

form表单使用Select 选择器

案例: ps&#xff1a;年度的值类型要与select 选择器中 value 类型一致&#xff01;&#xff01; 如果input框中显示的是数字&#xff0c;说明年度的值没有与选择器中的的value一致&#xff01;&#xff01;&#xff01; YearNum 要与 value 类型一致&#xff01;&#xff01…

Jmeter的常用设置(一)

文章目录 前言一、Jmeter设置中文 方法一&#xff08;临时改为中文&#xff09;方法二&#xff08;永久改成中文&#xff09;二、启动Jmeter的两种方式 方法一&#xff08;直接启动&#xff0c;不打开cmd窗口&#xff09;方法二&#xff08;带有cmd窗口的启动&#xff09;三、调…

走进Vue2飞入Vue3

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 前端相关 ✨特色专栏&…

第一代Spring Cloud核心组件

第一代Spring Cloud核心组件&#xff08;Spring Cloud Netflix&#xff09; Eureka服务注册中心(服务注册中心:Eureka,Nacos,Zookeeper,Consul) Ribbon负载均衡 Hystrix熔断器 Feign远程调用组件(Feign RestTemplate Ribbon Hystrix) GateWay网关组件 Config分布式配置中心 …

【C语言】-- 死循环了怎么办?

#include <stdio.h> int main() {int i 0;int arr[] {1,2,3,4,5,6,7,8,9,10};for(i0; i<12; i){arr[i] 0;printf("hello\n");}return 0; } 阅读上面这个代码&#xff0c;我们会认为这不就是简单的数组访问越界么。那么这段代码就应该会报错&#xff0c;…

三维重建以及神经渲染中的学习(三)

三维重建以及神经渲染中的学习 公众号AI知识物语 本文内容为参加过去一次暑期课程学习时的笔记&#xff0c;浅浅记录下。 三维图形可控生成&#xff1a; 1&#xff1a;学习一个图形生成模型 2&#xff1a;具有可控三维变量&#xff1a;1物体形状&#xff1b;2物体位置&…

Ubuntu 放弃了战斗向微软投降

导读这几天看到 Ubuntu 放弃 Unity 和 Mir 开发&#xff0c;转向 Gnome 作为默认桌面环境的新闻&#xff0c;作为一个Linux十几年的老兵和Linux桌面的开发者&#xff0c;内心颇感良多。Ubuntu 做为全世界Linux界的桌面先驱者和创新者&#xff0c;突然宣布放弃自己多年开发的Uni…

七牛云的使用(图片超详讲解)

一、为什么要使用七牛云的OSS(对象存储服务)&#xff1f; 二、七牛云使用&#xff1a; 登录七牛云官网&#xff0c;注册并认证 (初次认证有30天免费使用权限)新建存储空间 点击创建的空间名字&#xff0c;进入 空间概括如下&#xff1a; 阅读帮助文档&#xff0c;在自己的…

Java微服务金融项目智牛股-基础知识三(Restful、HATEOAS、GRPC、SEATA )

Restful定义 Restful是一种软件架构与设计风格&#xff0c; 并非一套标准&#xff0c; 只提供了一些原则与约定条件。REST提供了一组架构约束&#xff0c;当作为一个整体来应⽤用时&#xff0c;强调组件交互的可伸缩性。接⼝口的通⽤用性、组件的独⽴立部署、以及⽤用来减少交…