網(wǎng)站首頁 編程語言 正文
1. 題目描述
2. 解題思路
逆波蘭表達(dá)式由波蘭的邏輯學(xué)家盧卡西維茲提出,它的特點(diǎn)是:沒有括號(hào),運(yùn)算符總是放在和它相關(guān)的操作數(shù)之后。因此,逆波蘭表達(dá)式也稱后綴表達(dá)式,它嚴(yán)格遵循「從左到右」的運(yùn)算。
在我們平時(shí)生活中,使用的算式則是一種中綴表達(dá)式,如 ( 1 + 2 ) * ( 3 + 4 )
。
該算式的逆波蘭表達(dá)式寫法為 ( ( 1 2 + ) ( 3 4 + ) * )
。
計(jì)算逆波蘭表達(dá)式的值時(shí),使用一個(gè)棧存儲(chǔ)操作數(shù),從左到右遍歷逆波蘭表達(dá)式,進(jìn)行如下操作:
- 從左至右掃描該算術(shù)表達(dá)式,從第一個(gè)字符開始判斷,如果該字符是數(shù)字,則將數(shù)字入棧;
- 如果不是數(shù)字,該字符則是運(yùn)算符,如果遇到運(yùn)算符,則將棧里面的兩個(gè)操作數(shù)出棧,其中先出棧的是右操作數(shù),后出棧的是左操作數(shù), 使用運(yùn)算符對(duì)兩個(gè)操作數(shù)進(jìn)行運(yùn)算,將運(yùn)算得到的新操作數(shù)入棧。
整個(gè)逆波蘭表達(dá)式遍歷完畢之后,棧內(nèi)只有一個(gè)元素,該元素即為逆波蘭表達(dá)式的值。
3. 動(dòng)圖演示
來看個(gè)動(dòng)圖
4. 代碼實(shí)現(xiàn)
有一點(diǎn)需要注意,num 1 和 num2 進(jìn)行運(yùn)算的時(shí)候,num1 是右操作數(shù),num2 是左操作數(shù),別寫反了!!!
代碼示例
class Solution { public: int evalRPN(vector<string>& tokens) { stack<long long> st; for (auto& str : tokens) { if (str == "+" || str == "-" || str == "*" || str == "/") { auto num1 = st.top(); st.pop(); auto num2 = st.top(); st.pop(); if (str == "+") { st.push(num2 + num1); } else if (str == "-") { st.push(num2 - num1); } else if (str == "*") { st.push(num2 * num1); } else if (str == "/") { st.push(num2 / num1); } } else { st.push(stoi(str)); // 如果是操作數(shù)就入棧,因?yàn)檫@是字符,所以要轉(zhuǎn)成數(shù)字 } } return st.top(); } };
原文鏈接:https://blog.csdn.net/m0_63325890/article/details/128391664
相關(guān)推薦
- 2022-06-19 Tomcat?starup.bat腳本開機(jī)自啟動(dòng)的實(shí)現(xiàn)_Tomcat
- 2022-03-14 網(wǎng)關(guān)解決Response to preflight request doesn‘t pass acc
- 2023-04-18 C語言計(jì)算連續(xù)無序數(shù)組中缺省數(shù)字方法詳解_C 語言
- 2022-11-23 Python面向?qū)ο蟮膬?nèi)置方法梳理講解_python
- 2023-04-02 Python中time庫的使用(日期時(shí)間)_python
- 2023-03-22 nginx.conf配置兩個(gè)前端路徑_nginx
- 2022-11-21 正則表達(dá)式RegExp語法與用法詳解_正則表達(dá)式
- 2022-10-18 Qt實(shí)現(xiàn)計(jì)算器功能_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支