可視化圖解算法53:表達式求值

牛客網 面試筆試 TOP 101 ?

1. 題目

描述

請寫一個整數計算器,支持加減乘三種運算和括號。

數據范圍:0≤∣s∣≤100,保證計算結果始終在整型范圍內

要求:空間復雜度: O(n),時間復雜度 O(n)

示例1

輸入:

"1+2"

返回值:

3

示例2

輸入:

"(2*(3-4))*5"

返回值:

-10

示例3

輸入:

"3+2*3*4-1"

返回值:

26

2. 解題思路

表達式的求值可以通過棧來完成,具體思路如下:

如果文字描述的不太清楚,你可以參考視頻的詳細講解。

  • Python編碼:嗶哩嗶哩_bilibili

  • Java編碼:嗶哩嗶哩_bilibili

  • Golang編碼:嗶哩嗶哩_bilibili

3. 編碼實現

核心代碼如下:

/*** 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可** 返回表達式的值* @param s string字符串 待計算的表達式* @return int整型*/
func solve(s string) int {// write code here// 1. 定義棧、輔助變量stack := NewStack()num := 0sign := uint8('+')// 2. 遍歷字符串中的字符進行計算for i := 0; i < len(s); i++ {v := s[i]// 2.1 如果是空格,跳過if v == ' ' {continue}// 2.2 如果是數字,計算對應的值if isDigit(v) {num = num*10 + int(v-'0')}// 2.3 如果是 左括號 對括號里的內容進行計算(遞歸)if v == '(' {j := i + 1countPartition := 1for countPartition > 0 {if s[j] == '(' {countPartition++}if s[j] == ')' {countPartition--}j++}//遞歸求解括號里的內容,遞歸的字符串為:s[i+1,j-1),左閉右開num = solve(s[i+1 : j-1])i = j - 1 // 控制循環變量值:i 更改 (for循環結束一輪,i值會再加1)}// 2.4 如果是運算符,進行運算(入棧的數字已經是計算過的)if !isDigit(v) || i == len(s)-1 {if sign == '+' {stack.Push(num) //加號 直接入棧} else if sign == '-' {stack.Push(-1 * num) //減號,入棧的是負數} else if sign == '*' {tmp := stack.Pop()stack.Push(tmp * num)} else if sign == '/' {tmp := stack.Pop()stack.Push(tmp / num)} else {}num = 0sign = v}}//3.將棧中的數據累加返回res := 0for !stack.isEmpty() {res += stack.Pop() //如果棧非空,對棧中的值求和}return res
}func isDigit(v uint8) bool {if v >= '0' && v <= '9' {return true}return false
}

具體完整代碼你可以參考下面視頻的詳細講解。

  • Python編碼:Python數據結構LeetCode筆試面試算法_嗶哩嗶哩_bilibiliPython數據結構LeetCode筆試面試算法,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1372872

  • Java編碼:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367926

  • Golang編碼:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364952

4.小結

表達式的求值可以通過棧來完成,具體操作方法為:

1. 定義一個棧,棧中保存求值的結果;

2. 依次遍歷運算字符串:

????????1)如果字符是數字,通過變量保存該數字;

????????2)如果是括號,截取括號中的字符串遞歸調用;

????????3)如果是運算符,進行入棧操作:加號直接入棧;減號入棧為負數;乘號則與出棧的值相乘再入棧;除號則與出棧的值相除再入棧(乘除的優先級高,因此需要先出棧操作之后再入棧)。

3. 計算結果:

????????將棧中的值進行累加,就是表達式的值。

《數據結構與算法》深度精講課程正式上線啦!7 大核心算法模塊全解析:

? ? ? 鏈表

? ? ? 二叉樹

? ? ? 二分查找、排序

? ? ? 堆、棧、隊列

? ? ? 回溯算法

? ? ? 哈希算法

? ? ? 動態規劃

無論你是備戰筆試面試、提升代碼效率,還是突破技術瓶頸,這套課程都將為你構建扎實的算法思維底座。🔥立即加入學習打卡,與千名開發者共同進階!

  • Python編碼實現:Python數據結構LeetCode筆試面試算法_嗶哩嗶哩_bilibiliPython數據結構LeetCode筆試面試算法,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ss897667807

  • Java編碼實現:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ss161443488

  • Golang編碼實現:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ss63997

對于數據結構與算法,我們總結了一套【可視化+圖解】方法,依據此方法來解決相關問題,算法變得易于理解,寫出來的代碼可讀性高也不容易出錯。具體也可以參考視頻詳細講解。

今日佳句:誰言寸草心,報得三春輝。

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

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

相關文章

小白成長之路-Nginx配置(二)

文章目錄 一、localtion配置1.匹配規則2.匹配優先級3.配置案例 二、rewrite1、 語法2、 可寫入字段3 配置案例4 if 指令5.sutoindex6. nginx配置中的常用變量 三、配置Nginx狀態統計1.下載vts模塊2.編譯nginx 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參…

Qt的第一個程序

Qt的第一個程序 1.hello world2.使用圖形化拖拽方式3.使用C代碼的方式3.1.頭文件3.2.setText3.3.對象樹 4.設計MyLabel5.亂碼問題 &#x1f31f;&#x1f31f;hello&#xff0c;各位讀者大大們你們好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列專欄&#xff…

圖書數據接口

基本說明&#xff1a; 接口地址&#xff1a;http://data.isbn.work/openApi/getInfoByIsbn?isbn{isbn}&appKey{appkey}返回格式&#xff1a;json請求方式&#xff1a;get請求示例&#xff1a;http://data.isbn.work/openApi/getInfoByIsbn?isbn9787513159074&appKey…

MongoDB原理

目錄 一、概念 二、架構 2.1 邏輯結構 2.2 數據模型 2.3 存儲引擎&#xff1a;WiredTiger 三、事務 一、概念 MongoDB是文檔數據庫&#xff0c;基本存儲單元是 文檔&#xff08;Document&#xff09;&#xff0c;以BSON格式&#xff08;一種類json的二進制形式&#xff…

《解碼音頻:從基礎到未來的聽覺探索》

音頻&#xff1a;開啟聲音世界的大門 在生活的每一個角落&#xff0c;音頻如影隨形&#xff0c;編織出豐富多彩的聽覺體驗。清晨&#xff0c;第一縷陽光尚未完全照進房間&#xff0c;手機里溫柔的鬧鐘鈴聲&#xff0c;將我們從睡夢中輕輕喚醒&#xff0c;開啟活力滿滿的一天。通…

web安全之h2注入系統學習

起初是在N1 Junior 2025 上面碰到一題&#xff0c;考點是h2的sql注入。由于之前沒有見過&#xff0c;趁此機會系統學習一番 實驗代碼 public class H2Inject {public static void main(String[] args) throws Exception{JdbcDataSource dataSource new JdbcDataSource();dataS…

AWS認證系列:考點解析 - cloud trail,cloud watch,aws config

&#x1f3af;一句話總覽&#xff1a; 服務名類比/角色主要功能CloudTrail監控攝像頭錄像回放記錄“誰在什么時候做了什么操作”CloudWatch護士測體溫 護士喊醫生實時監控系統狀態&#xff0c;并能報警/自動應對AWS Config保安巡邏 記錄資產變更歷史記錄 AWS 資源的“配置狀…

Java八股文——數據結構「數據結構篇」

了解哪些數據結構&#xff1f; 面試官您好&#xff0c;我了解并使用過多種數據結構。在我的理解中&#xff0c;數據結構可以分為幾個大的類別&#xff0c;每一類都有其獨特的優勢和適用場景。 1. 線性結構 (Linear Structures) 這類結構的特點是數據元素之間存在一對一的線性…

C#測試調用EPPlus根據批注設置excel單元格內容

EPPlus也是常用的Excel文件操作庫&#xff0c;但不同于ClosedXML&#xff0c;使用EPPlus前需要設置授權信息&#xff0c;商業應用需要設置商業授權&#xff0c;個人使用或非商業應用也需要設置授權&#xff08;測試的時候只需設置全名&#xff0c;保存excel文件時會保存到文件詳…

windows本地搭建skywalking, 線程池中traceId不丟失

1.從官網下載9.0.0版本 Downloads | Apache SkyWalking 其它歷史版本的 下載地址 Index of /dist/skywalking 這個頁面 可以下載 apm服務: apache-skywalking-apm-9.0.0.tar.gz agent的包: apache-skywalking-java-agent-9.0.0.tgz 2.解壓后, (看情況去config路徑下 appli…

多模態大語言模型arxiv論文略讀(135)

Agent S: An Open Agentic Framework that Uses Computers Like a Human ?? 論文標題&#xff1a;Agent S: An Open Agentic Framework that Uses Computers Like a Human ?? 論文作者&#xff1a;Saaket Agashe, Jiuzhou Han, Shuyu Gan, Jiachen Yang, Ang Li, Xin Eric…

wpa_supplicant連接到了路由,但是 udhcpc會分配到不同網段的ip,路由器ip為192.168.0網段,板子分配ip為192.168.1的網段

wpa_supplicant連接到了路由&#xff0c;但是 udhcpc會分配到不同網段的ip,路由器ip為192.168.0網段&#xff0c;板子分配ip為192.168.1的網段 你提到的情況&#xff1a; 使用 wpa_supplicant 成功連接到路由器&#xff1b; 然后通過 udhcpc&#xff08;DHCP客戶端&#xff09…

[Hestia]開源網絡服務器控制面板,快速、可靠、開源

測評介紹 本期測評試用一下Hestia這款面板。Hestia是一個由國際社區支持開發的開源項目&#xff0c;2019年正式發布&#xff0c;目前已積累1.1萬余次代碼提交&#xff0c;幾乎每周都有十多次的代碼提交&#xff0c;更新熱度很高。僅支持比較新的debian和ubuntu&#xff0c;對于…

Windows 安裝 Redis8.0.2

1.下載 Releases redis-windows/redis-windowshttps://github.com/redis-windows/redis-windows/releases 下載后直接解壓到想要的安裝目錄就行了&#xff0c;啟動Redis直接雙擊 redis-server.exe 文件就行了&#xff0c;Redis啟動后雙擊 redis-cli.exe 就可以直接連接到Redi…

GitHub中openmmlab和Detectron2的區別

MMDetection 和 Detectron2 都是計算機視覺領域中流行的開源目標檢測框架&#xff0c;它們有許多相似之處&#xff0c;但也存在一些關鍵差異。以下是兩者的主要區別&#xff1a; 1. 開發團隊與社區 MMDetection 由中國開源組織 OpenMMLab 開發維護&#xff0c;社區以中文用戶為…

開疆智能CCLinkIE轉ModbusTCP網關連接施耐德TCP從站配置案例

本案例是三菱PLC通過CCLinkIE轉ModbusTCP網關連接施耐德Modicon M262 Logic/Motion Controller的配置案例 配置方法&#xff1a; 首先設置Modicon M262 Logic/Motion Controller Modbus TCP 從站設備 I/O 映射選項卡 I/O 以如下方式從主站視角映射到 Modbus 寄存器&#xff1…

【源碼】Reactive 源碼

前言 用了很長時間的 componsition-api 了&#xff0c;最近想看看源碼&#xff0c;抱著單純的學習心態先從 reactive 開始吧。 個人習慣&#xff1a; 看代碼要帶著問題去看&#xff0c;不要盲目的去看問題就是這次看源碼的主線&#xff0c;要圍繞著主線去展開&#xff0c;過…

銀河麒麟 | ubuntu 安裝國產達夢DM8數據庫(安裝+外網通+IDEA連接)

目錄 官網下載安裝 下載安裝包 創建安裝用戶組dinstall 創建安裝用戶dmdba并指定組 創建DM8軟件安裝目錄修改權限 檢查、修改系統資源限制 解壓.zip的壓縮包 安裝mount數據庫 圖形化安裝 清除之前的掛載 開啟Disql服務 修改dmdba的環境變量 檢查狀態 進入數據庫 …

MySQL與Oracle視圖:深入解析與全面對比

視圖概念 視圖在 MySQL 與Oracle中本質上是一種虛擬表&#xff0c;其數據并非實際存儲&#xff0c;而是基于一個或多個基礎表的查詢結果動態生成。它像是對復雜查詢的一種封裝&#xff0c;極大地簡化了數據的查詢操作。例如&#xff0c;當我們需要頻繁從多個關聯表中獲取特定數…

uniapp通過webview套h5時使用plus調取藍牙/usb打印

安卓使用usb調取打印機 /*** 安卓usb調取打印機*param { string | bytes[] } html 傳入的打印內容*傳入一段文本或一個bytes數組* returns*/ export const printUsb (html) > {return new Promise((resolve, reject) > {if (!window.plus) return reject(new Error(&qu…