解題思路:
1、雙棧模擬,乙個用來存數,乙個用來存操作符。需要考慮 '('後面緊跟'+'、'-'這種情況
2、遞迴:遇到左括號開始遞迴,遇到右括號結束遞迴,返回值。
1class
solution:
2def
calculate(self, s):
3 s = '
('+s+')'
4 stack =
5 op =
6 val =0
7 flag =false
8for i in
range(len(s)):
9if ord('
0')<=ord(s[i])<=ord('9'
):10 val=val*10+ord(s[i])-ord('0'
)11 flag=true
12elif s[i]=='('
:(')
(')15
elif s[i]==')'
:16ifflag:
1718 flag =false
19 val =0
20 ans =0
21while op[-1]!='('
and stack[-1]!='('
:22if op[-1]=='+'
:23 ans = ans + stack[-1]
24elif op[-1]=='-'
:25 ans = ans - stack[-1]
26 _,_=stack.pop(),op.pop()
2728
if op[-1]=='('
and stack[-1]=='('
:29 _ =op.pop(),stack.pop()
30elif op[-1]=='('
:31 ans+=stack[-1]
32 _ =stack.pop()
33 _ =op.pop(), stack.pop()
34else:35
print('
error')
36exit()
3738
elif s[i]=='+'
:39ifflag:
4041 flag=false
42 val =0+'
)44elif s[i]=='-'
:45ifflag:
4647 flag =false
48 val=0-'
)50elif s[i]=='':
51continue
52return stack[-1]
53 s = solution().calculate("
0+0+(-0+0)")
54print(s)
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...