演算法練習 為運算表示式設計優先順序

2021-10-04 22:11:58 字數 1497 閱讀 2586

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

示例 1:

輸入: 「2-1-1」

輸出: [0, 2]

解釋: ((2-1)-1) = 0 (2-(1-1)) = 2

示例 2:

輸入: 「23-45」

輸出: [-34, -14, -10, -10, 10]

解釋: (2*(3-(45))) = -34

((23)-(45)) = -14

((2(3-4))5) = -10

(2((3-4)5)) = -10

(((23)-4)*5) = 10

數學算式,無論是那種運算方式,最後都是兩個結果進行運算,可以將其抽象為 左部分和右部分

利用遞迴方法進行運算

迴圈遍歷輸入的字串

如果遇到是"+""-""*"就將字串拆為兩部分,這兩部分的運算結果進行組合就是字串的一種結果

當然拆分成兩部分之後,每一部分都有可能是乙個較小的算式,然後針對各部分再次進行拆分計算

public

static list

diffwaystocompute

(string input)

list

result =

newarraylist

();for

(int i =

0;ilength()

;i++)}

}}} map.

put(input, result);if

(result.

size()

==0)return result;

}

substring() 方法

用於提取字串中介於兩個指定下標之間的字元。

語法

stringobject.substring(start,stop)

返回值

乙個新的字串,該字串值包含 stringobject 的乙個子字串,其內容是從 start 處到 stop-1 處的所有字元,其長度為 stop 減 start。

說明

substring() 方法返回的子串包括 start 處的字元,但不包括 stop 處的字元。

如果引數 start 與 stop 相等,那麼該方法返回的就是乙個空串(即長度為 0 的字串)。如果 start 比 stop 大,那麼該方法在提取子串之前會先交換這兩個引數。

在做這個題時,和前兩天做過的計算括號的組合方式有點像,都用到了遞迴的方法,做了兩個這樣的題,我突然感覺對遞迴有了新的認識,乙個方法,兩種情況,如果遞迴到底就返回結果,沒有到底就進行遞迴

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

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

分治演算法為運算表示式設計優先順序

首先對字串進行預處理,將數字和運算子進行分開儲存,然後便可以繼續分治策略。基本分治策略大概如下 我們假設數字的數目為n,然後將前m個數字求出他們的所有優先順序的結果,然後求出後n m個數字的所有優先順序的結果。做完這兩步之後找到前m個數和後n m個數中間隔的算數符號,然後用這個算數符號對這兩組資料的...

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

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