代碼隨想錄刷題Day29

逆波蘭表達式求值

這是一道經典地使用棧來解決后綴表達式求解的題目。使用棧來求解后綴表達式的流程如下:

借助棧的結構,可以求解出原始表達式是:9 +(-3 - 1)* 3 + 10 / 2 = 2,在遵照規則過程中,還有些細節要注意:

  1. ??數字字符串如何轉化為整數格式?尤其是負數。
  2. 注意遇到計算符號時,從棧中出棧用于計算的兩個數,對于減法和除法是有序的,被減數/被除數應該是按照原始的入棧順序來確定,也就是先入棧的是被減數/被除數,所以先出棧的是減數/除數。

代碼如下,因為考慮到耗時上的加速,所以直接使用字符數組來表示棧,棧頂通過數組長度這個變量來維護:

class Solution {
public:int getInt(string s){//如果字符串是計算符,返回201int num = 201;if(s.length()==1&&(s[0]=='-'||s[0]=='+'||s[0]=='*'||s[0]=='/')){num = 201;}//字符串是數字,則轉化為int值else{if(s[0]=='-'){//這是一個負數num = 0;for(int i = 1;i<s.length();i++){num = 10 * num + s[i]-'0';}num = -num;}else{//非負數num = 0;for(int i=0;i<s.length();i++){num  = num *10 +s[i]-'0';}}}return num;}int evalRPN(vector<string>& tokens) {int num_stack[10001];int stack_cnt = 0;for(int i= 0;i<tokens.size();i++){if(getInt(tokens[i])==201){//遇到計算符,就兩個數字出棧,計算結果,并把結果放回到棧中int num2 = num_stack[stack_cnt-1];stack_cnt--;int num1 = num_stack[stack_cnt-1];stack_cnt--;int res = 0;if(tokens[i]=="+"){res = num1+num2;}else if(tokens[i]=="-"){res = num1 - num2;}else if(tokens[i]=="*"){res = num1 * num2;}else if(tokens[i]=="/"){res = num1 / num2;}num_stack[stack_cnt++]=res;}else{//遇到數字就入棧num_stack[stack_cnt++]=getInt(tokens[i]);}}return num_stack[stack_cnt-1];}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92795.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92795.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92795.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

crew AI筆記[3] - 設計理念

二八法則-task設計最重要80%精力設計tasks&#xff0c;20%精力定義agents花最多的實踐定義任務說明清晰定義輸入輸出增加示例和預期結果來約束輸出剩下的精力完善agent的role、goal、backstory1、Agent設計三要素role-goal-backstory框架Role - 職能定義足夠具體【作家 &#x…

【李宏毅-2024】第六講 大語言模型的訓練過程1——預訓練(Pre-training)

目錄概述1. 預訓練&#xff08;Pre-training&#xff09;2. 微調&#xff08;Fine-tuning&#xff0c;又稱 SFT&#xff0c;Supervised Fine-Tuning&#xff09;3. 對齊&#xff08;Alignment&#xff0c;又稱 RLHF 或 DPO 等&#xff09;4 三階段對比6 第一階段——自我學習&a…

基于LLVM的memcpy靜態分析工具:設計思路與原理解析(C/C++代碼實現)

在程序開發中&#xff0c;內存復制操作&#xff08;如memcpy&#xff09;往往是性能瓶頸的關鍵來源——尤其是大型內存塊的復制&#xff0c;可能導致緩存失效、帶寬占用過高等問題。為了精準定位這些潛在的性能熱點&#xff0c;開發者需要一種能自動識別程序中memcpy調用&#…

使用 Conda 安裝 xinference[all](詳細版)

1. 安裝 Miniconda&#xff08;若未安裝&#xff09; Miniconda 是 Anaconda 的輕量版&#xff0c;僅包含 Conda 和 Python&#xff0c;適合服務器環境。 下載并安裝 Miniconda 下載地址&#xff1a;Index of /miniconda &#xff0c;可以自行選擇適合的版本 # 下載最新版 …

服務器登上去,顯示 failed to send WATCHDOG 重啟有效嗎?

文章目錄 概要整體架構流程技術名詞解釋技術細節小結 概要 當你登錄服務器時&#xff0c;看到類似以下提示&#xff1a; failed to send WATCHDOG: Resource temporarily unavailable這通常和系統的 systemd 服務有關&#xff0c;尤其是那些啟用了 watchdog&#xff08;看門…

重學React(五):脫圍機制一

背景&#xff1a; 之前將React的基礎知識以及狀態管理相關的知識都過了一遍&#xff0c;查漏補缺的同時對React也有了一些新鮮的認知&#xff0c;接下來這個模塊的名字很有意思&#xff1a;脫圍機制&#xff0c;內容也比之前的部分難理解一些。但整體看下來&#xff0c;理解之后…

去除Edge微軟瀏覽器與Chrome谷歌瀏覽器頂部出現“此版本的Windows不再支持升級Windows 10”的煩人提示

前言 在 Windows 7 中&#xff0c;安裝 Microsoft Edge 109 版本后&#xff0c;啟動瀏覽器時會彈出提示&#xff1a; 此版本的 Windows 不再支持 Microsoft Edge。升級到 Windows 10 或更高版本&#xff0c;以獲取常規功能和安全更新。 同樣地&#xff0c;安裝 Google Chrome 1…

PWM、脈沖

要求&#xff1a;一、PWM輸出PWM波生成原理在此處使用TIM2生成PWM&#xff0c;PA1輸出PWM波。CNT小于CCR時&#xff0c;輸出高電平&#xff1b;CNT大于CCR時&#xff0c;輸出低電平。 輸入捕獲測量頻率的原理輸入捕獲的捕獲意思是它在PWM波上升沿或者下降沿的時候&#xff0c;會…

文件IO(1)

.文件IO1.概念標準IO是有緩存的IO&#xff0c;文件IO沒有緩存&#xff0c;適合于通信、硬件設備操作標準IO是庫函數&#xff0c;文件IO是系統調用2.系統調用與庫函數系統調用&#xff1a;是Linux內核中的代碼&#xff0c;只能在Linux系統中使用庫函數&#xff1a;是對系統調用的…

【AI】Pycharm中要注意Python程序文件的位置

博主試著在本地電腦用Pycharm環境運行隨便一個機器學習然后做圖像識別的模型&#xff0c;Python的程序一直報博主學習圖片的路徑不正確&#xff0c;博主查了好幾遍&#xff0c;也沒找出問題&#xff0c;后來借助Deepseek才知道&#xff0c;Python主程序的位置一定要在Project下…

TDengine 可觀測性最佳實踐

TDengine 介紹 TDengine 是一款開源、高性能、云原生的時序數據庫&#xff0c;專為物聯網、車聯網、工業互聯網、金融、IT 運維等場景優化設計。它不僅提供了高效的數據存儲和查詢功能&#xff0c;還帶有內建的緩存、流式計算、數據訂閱等系統功能&#xff0c;能大幅減少系統設…

Jenkins 搭建鴻蒙打包

1、創建流水線工程 選擇 Freestyle project 2、配置模板倉庫、憑證 配置倉庫地址 創建憑證&#xff0c;憑證選擇賬號-密碼&#xff08;能夠訪問該倉庫的個人或管理員 Gitlab 賬密&#xff09; 到這里執行構建&#xff0c;便可以克隆倉庫到工作目錄 3、安裝插件 3.1 Rebuild…

【SpringBoot】02 基礎入門-什么是Spring Boot?:Spring與SpringBoot

文章目錄1、Spring能做什么1.1、Spring的能力1.2、Spring的生態1.3、Spring5重大升級1.3.1、響應式編程1.3.2、內部源碼設計2、為什么用SpringBoot2.1、SpringBoot優點2.2、SpringBoot缺點3、時代背景3.2、分布式分布式的困難分布式的解決3.3、云原生上云的困難4、如何學習Spri…

FFmpeg 編譯安裝和靜態安裝

FFmpeg 編譯安裝和靜態安裝 簡介 FFmpeg 是一個領先的多媒體框架&#xff0c;能夠解碼、編碼、轉碼、復用、解復用、流化、過濾和播放幾乎所有人類和機器創建的格式。本指南將詳細介紹如何在 CentOS 8.5.2111 系統上從源代碼編譯并安裝 FFmpeg 6.1.1 版本。從源代碼編譯安裝可…

人大BABEC地平線高效率具身導航!Aux-Think:探索視覺語言導航中數據高效的推理策略

作者&#xff1a; Shuo Wang1,3^{1,3}1,3, Yongcai Wang1^{1}1, Wanting Li1^{1}1 , Xudong Cai1^{1}1, Yucheng Wang3^{3}3, Maiyue Chen3^{3}3, Kaihui Wang3^{3}3, Zhizhong Su3^{3}3, Deying Li1^{1}1, Zhaoxin Fan2^{2}2單位&#xff1a;1^{1}1中國人民大學&#xff0c;2^…

01. maven的下載與配置

1.maven的下載與初步配置a.下載并配置倉庫地址下載maven壓縮包&#xff0c;并解壓&#xff0c;解壓后應有如下幾個文件點擊conf&#xff0c;打開settings.xml&#xff08;我用的VScode打開的&#xff09;&#xff0c;我們需要聲明一下內部倉庫的地址&#xff0c;以及私服的一些…

1701. 請輸出所有的3位對稱數

問題描述請輸出所有的 33 位對稱數&#xff0c;對稱數指的是一個整數 nn 正過來和倒過來是一樣的&#xff0c;比如&#xff1a;101、121、282…101、121、282…請從小到大輸出符合條件的3位對稱數&#xff0c;每行 11 個。輸入無。輸出從小到大按題意輸出符合條件的數&#xff…

C++算法·排序

排序的定義 這個不用說吧 就是根據某個條件對一個數列進行有序的操作 例如要求從小到大排序、從大到小排序等等 排序的分類 比較排序(Comparison(Comparison(Comparison Sorts)Sorts)Sorts) 特點&#xff1a;通過元素間的比較決定順序 時間復雜度下限&#xff1a;O(nO(nO(n…

微服務項目中的注冊中心——Nacos配置

從零開始&#xff1a;Nacos服務注冊與配置中心實戰教程 Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;是阿里巴巴開源的服務發現、配置管理工具&#xff0c;集注冊中心與配置中心于一體&#xff0c;廣泛應用于微服務架構。本文將從環境搭建到實戰配…

日期格式化成英文月,必須指定語言環境

如果不指定Locale.ENGLISH 在有些JDK下 輸出6月 INV USD 314,791.77,DUE 25-07 [PAID USD 503,389.56 ON 2025-07-16]Mar INV USD 52,042.00,DUE 25-07 [PAID USD 52,042.00 ON 2025-08-11]所以必…