식에 괄호를 추가하여 결과 최소화

2253 단어 theabbieleetcodedsa
expression"<num1>+<num2>"가 양의 정수를 나타내는 형식의 0 인덱스 문자열<num1>이 제공됩니다.
<num2>에 한 쌍의 괄호를 추가하여 괄호를 추가한 후 expression가 유효한 수학 표현식이 되고 가능한 가장 작은 값으로 평가되도록 합니다. 왼쪽 괄호는 expression 의 왼쪽에, 오른쪽 괄호는 '+' 의 오른쪽에 추가해야 합니다.
'+'가 가능한 가장 작은 값으로 평가되도록 한 쌍의 괄호를 추가한 후 expression를 반환합니다. 동일한 결과를 산출하는 답변이 여러 개 있는 경우 그 중 하나를 반환합니다.
expression의 원래 값과 요구 사항을 충족하는 괄호 쌍을 추가한 후의 값expression이 부호 있는 32비트 정수 내에 맞도록 입력이 생성되었습니다.

예 1:

입력: 식 = "247+38"
출력: "2(47+38)"
설명: expression는 2 * (47 + 38) = 2 * 85 = 170으로 평가됩니다.
오른쪽 괄호가 expression 의 오른쪽에 있어야 하므로 "2(4)7+38"은 유효하지 않습니다.
170이 가능한 가장 작은 값임을 알 수 있습니다.

예 2:

입력: 식 = "12+34"
출력: "1(2+3)4"
설명: 식은 1 * (2 + 3) * 4 = 1 * 5 * 4 = 20으로 평가됩니다.

예 3:

입력: 표현식 = "999+999"
출력: "(999+999)"
설명: '+'는 999 + 999 = 1998로 평가됩니다.

제약:
  • expression
  • 3 <= expression.length <= 10expression에서 '1''9'까지의 숫자로 구성됩니다.
  • '+'는 숫자로 시작하고 끝납니다.
  • expression는 정확히 하나의 expression를 포함합니다.
  • '+' 의 원래 값과 요구 사항을 충족하는 괄호 쌍을 추가한 후의 expression 값은 부호 있는 32비트 정수 내에 맞습니다.

  • 해결책:

    class Solution:
        def getInt(self, s):
            if len(s) == 0:
                return 1
            return int(s)
    
        def minimizeResult(self, expression: str) -> str:
            a, b = expression.split("+")
            minVal = float('inf')
            m = len(a)
            n = len(b)
            minPos = None
            for i in range(m):
                for j in range(1, n + 1):
                    currVal = self.getInt(a[:i]) * (self.getInt(a[i:]) + self.getInt(b[:j])) * self.getInt(b[j:])
                    if currVal < minVal:
                        minVal = currVal
                        minPos = (i, j)
            i , j = minPos
            return "{}({}+{}){}".format(a[:i], a[i:], b[:j], b[j:])
    

    좋은 웹페이지 즐겨찾기