給你乙個字串表示式 s ,請你實現乙個基本計算器來計算並返回它的值。
整數除法僅保留整數部分。
示例 1:
輸入:s = 「3+2*2」
輸出:7
示例 2:
輸入:s = " 3/2 "
輸出:1
示例 3:
輸入:s = " 3+5 / 2 "
輸出:5
昨天的題有括號懶得寫字尾表示式,今天沒有括號啦,那就用把中綴轉成字尾算好了~
首先建立乙個符號堆疊 st ,建立乙個整型佇列 q 存放字尾表示式。
掃瞄原字串,碰到數字就放到入隊,碰到符號就放到符號棧。
如果符號棧當前入棧元素 >= 棧頂元素的優先順序,那麼就將棧頂符號依次出棧,並放到表示式佇列裡。
最後根據佇列計算表示式的值,如果是數就扔到堆疊中,如果是符號就從堆疊中取兩個數出來運算一下,再把結果扔到堆疊中,最後堆疊中剩的元素就是結果~
ps:官方題解好像又偷懶了,官方題解的思路是,先計算出乘除的結果,再計算加減的結果,確實是簡單一些的。
附上官方題解傳送門:我是官方題解~
class
solution
else
if(s.
charat
(i)==
'-')
else
if(s.
charat
(i)==
'*')
else
if(s.
charat
(i)==
'/')
//否則是數字
else
}//符號入棧
if(nowsign !=0)
st.push
(nowsign);}
//數入隊
if(nownum !=-1
)}//把st清空
while
(!st.
empty()
)//中綴表示式算結果
int result =0;
while
(!q.
isempty()
)//符號
else
else
if(q.
peek()
==-5)
else
if(q.
peek()
==-2)
else
q.poll()
;}}//返回最終結果
return st.
pop();
}}
227 基本計算器 II
實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式僅包含非負整數,四種運算子和空格。整數除法僅保留整數部分。示例 1 輸入 3 2 2 輸出 7示例 2 輸入 3 2 輸出 1示例 3 輸入 3 5 2 輸出 5說明 思路 我們用乙個棧來儲存數字,同時記錄數字之前出現的符號,該符號初始化...
227 基本計算器 II
實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式僅包含非負整數,四種運算子和空格 整數除法僅保留整數部分。示例 1 輸入 3 2 2 輸出 7 示例 2 輸入 3 2 輸出 1 示例 3 輸入 3 5 2 輸出 5 說明 你可以假設所給定的表示式都是有效的。請不要使用內建的庫函式 ev...
227 基本計算器 II
給你乙個字串表示式 s 請你實現乙個基本計算器來計算並返回它的值。整數除法僅保留整數部分。輸入 s 3 2 2 輸出 7輸入 s 3 2 輸出 1輸入 s 3 5 2 輸出 5棧,字串 利用正規表示式,首先對字串s利用正規表示式根據 乘,分開,然後 將字串s中的 乘,按順序取出,存放到另外乙個陣列,...