給定乙個含有數字和運算子的字串,為表示式新增括號,改變其運算優先順序以求出不同的結果。你需要給出所有可能的組合的結果。有效的運算符號包含+
,-
以及*
。輸入:"2-1-1"
輸出:[0, 2]
解釋:((2-1)-1) = 0(2-(1-1)) = 2
輸入:"2*3-4*5"
輸出:[-34, -14, -10, -10, 10]
解釋:(2*(3-(4*5))) = -34((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10
分治法:題目要求不同括號組合下表示式的值。將乙個表示式根據其操作符可以化成子表示式,這樣就可以將問題劃分成求左邊/右邊表示式在不同括號組合下的值。其中有幾個操作符就可以進行幾次劃分
python
class solution:
def diffwaystocompute(self, input):
res =
for i in range(1, len(input)):
if not input[i].isdigit():
left = self.diffwaystocompute(input[:i])
right = self.diffwaystocompute(input[i+1:])
for l in left:
for r in right:
if not res:
res = [int(input)]
return res
leetcode241 為運算表示式設計優先順序
遍歷字串,遇到運算子,就可形成乙個分組,分別計算當前運算子的左部分和右部分,然後將得到的結果進行運算。此時左部分和右部分運算的結果又可按照他們當中的運算子進行計算,因此會對應的形成他們的list,其中儲存著可能的結果。所以在 實現的時候,用list接收左右部分的計算結果。然後分別遍歷兩個list的數...
LeetCode241 為運算表示式設計優先順序
可以列舉所有的運算子的位置,然後遞迴算出該運算子左右的表示式所有可能的取值,然後對所有可能的取值進行計算。首先,我們需要把原字串input中的所有數字和運算子都放到乙個vector裡,因為每個數字的長度不確定,所以放到 vector裡方便我們進行計算。然後寫乙個計算expr某段區間的所有表示式的可能...
241 為運算表示式設計優先順序
思路 分治法 不同位置新增括號的作用在於改變不同運算子的優先順序。所以,可以在遍歷的過程中依次把運算子設為第一優先順序,遞迴計算左邊和右邊。class solution def diffwaystocompute self,input str list int if input isdigit 全數...