241 為運算表示式設計優先順序

2021-10-13 09:22:46 字數 2869 閱讀 8168

題目描述:給定乙個含有數字和運算子的字串,為表示式新增括號,改變其運算優先順序以求出不同的結果。你需要給出所有可能的組合的結果。有效的運算符號包含 +, - 以及 * 。

解題思路一:對於每乙個運算符號,先執行兩邊的表示式,然後再處理當前這個符號,採用分治的思想,**如下:

class

solution

:def

diffwaystocompute

(self,

input

:str)-

> list[

int]

:# res = set()

nums =

ops =

n =len(

input

) i =

0while

(i < n):if

not(

ord(

'0')

<=

ord(

input

[i])

<=

ord(

'9')):

input

[i])

i +=

1 j = i

while

(j < n and

ord(

'0')

<=

ord(

input

[j])

<=

ord(

'9')):

j +=

1int

(input

[i:j]))

i = j

# from collections import defaultdict

# g = defaultdict(list)

defcal

(nums, ops):if

len(nums)==1

:return

[str

(nums[0]

)]n =

len(ops)

ans =

for i in

range

(n):

left = cal(nums[

:i+1

], ops[

:i])

right = cal(nums[i+

1:n+1]

, ops[i+

1:n]

)for l in left:

for r in right:

str(

eval

(l+ops[i]

+r))

)return ans

ans = cal(nums, ops)

return

[int

(num)

for num in ans]

解題思路二:在思路一中很多子問題的解都重複求解了,改用動態規劃自下而上進行求解,**如下:

class

solution

:def

diffwaystocompute

(self,

input

:str)-

> list[

int]

:# res = set()

nums =

ops =

n =len(

input

) i =

0while

(i < n):if

not(

ord(

'0')

<=

ord(

input

[i])

<=

ord(

'9')):

input

[i])

i +=

1 j = i

while

(j < n and

ord(

'0')

<=

ord(

input

[j])

<=

ord(

'9')):

j +=

1int

(input

[i:j]))

i = j

from collections import defaultdict

n =len(nums)

dp =[[

for i in

range

(n)]

for _ in

range

(n)]

for i in

range

(n):

for j in

range

(n-i)

:for k in

range

(j,j+i)

:for left in dp[j]

[k]:

for right in dp[k+1]

[j+i]

:if ops[k]

=='+'

: val = left + right

elif ops[k]

=='-'

: val = left - right

else

: val = left * right

dp[j]

[j+i]

if i ==0:

dp[j]

[j+i]

)return dp[0]

[n-1

]

241 為運算表示式設計優先順序

思路 分治法 不同位置新增括號的作用在於改變不同運算子的優先順序。所以,可以在遍歷的過程中依次把運算子設為第一優先順序,遞迴計算左邊和右邊。class solution def diffwaystocompute self,input str list int if input isdigit 全數...

241 為運算表示式設計優先順序

給定乙個含有數字和運算子的字串,為表示式新增括號,改變其運算優先順序以求出不同的結果。你需要給出所有可能的組合的結果。有效的運算符號包含 以及 示例 1 輸入 2 1 1 輸出 0,2 解釋 2 1 1 0 2 1 1 2 示例 2 輸入 23 45 輸出 34,14,10,10,10 解釋 2 3...

241 為運算表示式設計優先順序(分治)

給定乙個含有數字和運算子的字串,為表示式新增括號,改變其運算優先順序以求出不同的結果。你需要給出所有可能的組合的結果。有效的運算符號包含 以及 看到題就覺得有點複雜,可以考慮一下遞迴的方式,去尋找子問題和原問題解的關係。可以通過運算子把整個式子分成兩部分,兩部分再利用遞迴解決。以 2 3 4 5 為...