[征服分割]Let code 241Different Ways to Add Parentheses


道路標識241号
すべての計算結果をかっこで出力
復帰する
class Solution:
    def calculate(self,left,right,opt):
        result = []
        for l in left:
            for r in right:
                result.append(eval(str(l) + opt + str(r)))
        return result

    def diffWaysToCompute(self, expression: str):
        answer = []
        if expression.isdigit():
            return [expression]

        for i in range(len(expression)):
            if expression[i] in "+-*":
                left = self.diffWaysToCompute(expression[:i])
                right = self.diffWaysToCompute(expression[i+1:])

                answer.extend(self.calculate(left,right,expression[i]))

        return answer

  • 例:「3+2*1-5+4」式が与えられている場合、演算子による前後のグループ化->数値は2桁であってもよいため、数値は常に偶数インデックスではない(divide)

  • 最初は(3)+(2*1-5+4)

  • (3)同じような場合に分けられないので表現する.isdigit()はフィルタリングされ[3]自体に戻る.

  • (2*1-5+4)この部分は中括弧の大きさによって、いろいろな演算結果が出る可能性があります.

  • Aが「(A)演算子(B)」に分割された場合、Aが持つ計算結果はリストの左側に、Bが持つ計算結果はリストの右側に、2つのforゲートを回してこの組合せに戻るのが原理です.

  • したがって、diffWaysToComputeは、各式が持つ可能性のある計算結果の答えを返すだけです.
  • 文字列式の計算
  • 文字列を計算する式「3+4」にはいくつかの方法がありますが、evalを使用すると以下のように簡単に処理できます.戻りタイプはintです.
  • result = eval("3+4")
    print(result) # 7 
    集計リスト
    次のコードは、与えられた式で発生する可能性のあるすべての結果を求めるために作成されたfor文のコードです.
    非appendは、可能なすべての組合せ(リスト)の総和であるため、appendとして処理すると、リスト自体がリストに入る.したがって、リスト内の要素をマージするときにextendまたは+演算を使用できます.
    answer.extend(self.calculate(left,right,expression[i]))