leetcode - 2232. Minimize Result by Adding Parentheses to Expression

Description

You are given a 0-indexed string expression of the form "+" where and represent positive integers.

Add a pair of parentheses to expression such that after the addition of parentheses, expression is a valid mathematical expression and evaluates to the smallest possible value. The left parenthesis must be added to the left of '+' and the right parenthesis must be added to the right of '+'.

Return expression after adding a pair of parentheses such that expression evaluates to the smallest possible value. If there are multiple answers that yield the same result, return any of them.

The input has been generated such that the original value of expression, and the value of expression after adding any pair of parentheses that meets the requirements fits within a signed 32-bit integer.

Example 1:

复制代码
Input: expression = "247+38"
Output: "2(47+38)"
Explanation: The expression evaluates to 2 * (47 + 38) = 2 * 85 = 170.
Note that "2(4)7+38" is invalid because the right parenthesis must be to the right of the '+'.
It can be shown that 170 is the smallest possible value.

Example 2:

复制代码
Input: expression = "12+34"
Output: "1(2+3)4"
Explanation: The expression evaluates to 1 * (2 + 3) * 4 = 1 * 5 * 4 = 20.

Example 3:

复制代码
Input: expression = "999+999"
Output: "(999+999)"
Explanation: The expression evaluates to 999 + 999 = 1998.

Constraints:

复制代码
3 <= expression.length <= 10
expression consists of digits from '1' to '9' and '+'.
expression starts and ends with digits.
expression contains exactly one '+'.
The original value of expression, and the value of expression after adding any pair of parentheses that meets the requirements fits within a signed 32-bit integer.

Solution

Try every possible position to put the parentheses.

Time complexity: o ( n 2 ) o(n^2) o(n2)

Space complexity: o ( 1 ) o(1) o(1)

Code

python3 复制代码
class Solution:
    def minimizeResult(self, expression: str) -> str:
        def get_value_from_expression(expression: str) -> int:
            left, right = expression.find('('), expression.find(')')
            res = eval(expression[left + 1: right])
            if left == 0 and right == len(expression) - 1:
                pass
            elif left == 0:
                res *= int(expression[right + 1:])
            elif right == len(expression) - 1:
                res *= int(expression[:left])
            else:
                res *= int(expression[:left]) * int(expression[right + 1:])
            return res

        left_index = []
        right_index = []
        add_index = expression.find('+')
        for i in range(len(expression)):
            if i < add_index:
                left_index.append(i)
            elif i > add_index:
                right_index.append(i + 1)
        min_val = float('inf')
        res = ''
        for l in left_index:
            for r in right_index:
                cur_expression = f'{expression[:l]}({expression[l:r]}){expression[r:]}'
                cur_value = get_value_from_expression(cur_expression)
                if cur_value < min_val:
                    min_val = cur_value
                    res = cur_expression
        return res
相关推荐
蒹葭玉树1 分钟前
【C++上岸】C++常见面试题目--算法篇(第十八期)
c++·算法·面试
EkihzniY10 分钟前
OCR 发票识别与验真接口:助力电子化发票新时代
算法
一支鱼19 分钟前
leetcode-5-最长回文子串
算法·leetcode·typescript
茉莉玫瑰花茶1 小时前
算法 --- 分治(快排)
算法
郝YH是人间理想2 小时前
408考研——单链表代码题常见套路总结
c语言·数据结构·c++·考研·链表
闪电麦坤952 小时前
数据结构:哈希(Hashing)
数据结构·算法·哈希算法
l1t2 小时前
利用美团longcat.ai编写的C语言支持指定压缩算法通用ZIP压缩程序
c语言·开发语言·人工智能·算法·zip·压缩
hansang_IR3 小时前
【线性代数基础 | 那忘算9】基尔霍夫(拉普拉斯)矩阵 & 矩阵—树定理证明 [详细推导]
c++·笔记·线性代数·算法·矩阵·矩阵树定理·基尔霍夫矩阵
lingchen19063 小时前
MATLAB矩阵及其运算(三)矩阵的创建
算法·matlab·矩阵
野犬寒鸦3 小时前
力扣hot100:矩阵置零(73)(原地算法)
java·数据结构·后端·算法