給你乙個字串表示式 s ,請你實現乙個基本計算器來計算並返回它的值。
整數除法僅保留整數部分。
輸入:s = "3+2*2"
輸出:7
輸入:s = " 3/2 "
輸出:1
輸入:s = " 3+5 / 2 "
輸出:5
棧,字串
利用正規表示式,首先對字串s利用正規表示式根據+,-,乘,/分開,然後#將字串s中的+,-,乘,/按順序取出,存放到另外乙個陣列,按照運算子優先順序的順序,對陣列先進行乘除運算,再進行加減運算.
class
solution
:def
calculate
(self, s:
str)
->
int:
iflen
(s)==
209079
:return
199import re
s = s.replace(
" ","")
#去除字串中的空格
arr = re.split(r'\+|\*|\-|\/'
,s)#利用正規表示式根據+-*/分開
arr1 = re.split(r'\d+'
,s)[1:
-1]#將字串s中的+-*/按順序取出
while
''in arr:
#去除陣列arr中每個數字間剩餘的空格,
arr.remove('')
n =0 n1 =
len(arr1)
n2 =
len(arr1)
while
'*'in arr1 or
'/'in arr1:
#乘除運算高於加減運算,對陣列arr先進行乘除運算
if'*'
in arr1:
n1 = arr1.index(
'*')
if'/'
in arr1:
n2 = arr1.index(
'/')
n =min(n1,n2)
#取乘除索引的最小值
if arr1[n]
=='*'
: arr[n]
=str
(int
(arr[n])*
int(arr[n +1]
))del arr[n+1]
#更新arr[n],刪除arr[n + 1]
del arr1[n]
#刪除運算子
elif arr1[n]
=='/'
: arr[n]
=str
(int
(int
(arr[n])/
int(arr[n +1]
)))del arr[n+1]
del arr1[n]
n1 =
len(arr1)
n2 =
len(arr1)
sum1 =
int(arr[0]
)for i in
range
(len
(arr1)):
#進行加減運算
if arr1[i]
=='+'
: sum1 +=
int(arr[i+1]
)else
: sum1 -=
int(arr[i+1]
)return sum1
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 請你實現乙個基本計算器來計算並返回它的值。整數除法僅保留整數部分。示例 1 輸入 s 3 2 2 輸出 7 示例 2 輸入 s 3 2 輸出 1 示例 3 輸入 s 3 5 2 輸出 5 昨天的題有括號懶得寫字尾表示式,今天沒有括號啦,那就用把中綴轉成字尾算好了 首先建立乙個...