題目是:給你乙個字串表示式 s ,請你實現乙個基本計算器來計算並返回它的值。
比如:
輸入:s = "(1+(4+5+2)-3)+(6+8)"
輸出:23
這題有點類似編譯器設計,特點是狀態很多,很容易迷失在if-else中,所以使用有限狀態機dfa來解決
dfa(deterministic finite automation
)就是一系列狀態的遷移,大家可以試著畫下圖,就如下4種狀態轉來轉去,很簡單的
上圖中我畫了起始態的遷移示例(紅色字型),符號態的遷移示例(藍色字型),其他不畫了,道理一樣的,大家也可以自己畫下
狀態0-start 世界起始態;
1-sig 置加號或減號的狀態;
2-number 輸入數字時狀態;
3-end 世界結束態;
遷移條件:輸入的字元的種類驅動了狀態遷移
0是(
1+或-
2是數字
3是)
4是其他非法字元
注意事項:
空格事先去掉,簡化**
起始態和結束態,不僅是字串開始和結束,"("號也會開始乙個新的世界,原來的世界入棧
/**
* @param s
* @return
*/const
dfa=[[
0,1,
2,3,
3],//當狀態是起始態時,遇到各種字元型別所跳轉到的下個狀態,比如0是(,遇到0還是起始態,只不過是下個世界的[0
,3,2
,3,3
],[3
,1,2
,3,3
],[3
,1,3
,3,3
]];//字元分類子函式:返回字元的型別 0是( 1 +或- 2是數字 3是) 4是其他非法字元
const
classify
=function
(c)var
calculate
=function
(s))
; accm =0;
flag =
true
; val =0;
}else
if(transit ===1)
else
if(transit ===2)
else
status = transit;
}return accm +
(flag ? val :
-val);}
;
leetcode 224 基本計算器
題目 基本計算器 實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例1 輸入 1 1 輸出 2 示例2 輸入 2 1 2 輸出 3 示例3 輸入 1 4 5 2 3 6 8 輸出 23 說明 c include include cl...
leetcode 224 基本計算器
實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例 1 輸入 1 1 輸出 2 示例 2 輸入 2 1 2 輸出 3 示例 3 輸入 1 4 5 2 3 6 8 輸出 23 採用雙棧法,設立乙個資料棧和乙個操作符棧,在遍歷字串的過程...
Leetcode 224基本計算器
邏輯先寫第三步再寫第二步,思考時要按照表示式順序先看數字再看右括號正常考慮,時間複雜度o n class solution intcalculate string s else 遇到數字 nums.push n 處理多位數等價寫法 while j s.size isdigit s j j j i c...