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
相关推荐
扫地的小何尚2 分钟前
NVIDIA CUDA-Q QEC权威指南:实时解码、GPU解码器与AI推理增强
人工智能·深度学习·算法·llm·gpu·量子计算·nvidia
重生之我是Java开发战士5 分钟前
【数据结构】优先级队列(堆)
java·数据结构·算法
菜鸟233号5 分钟前
力扣216 组合总和III java实现
java·数据结构·算法·leetcode
大柏怎么被偷了6 分钟前
【Linux】重定向与应用缓冲区
linux·服务器·算法
AuroraWanderll10 分钟前
类和对象(三)-默认成员函数详解与运算符重载
c语言·开发语言·数据结构·c++·算法
阿华hhh14 分钟前
数据结构(树)
linux·c语言·开发语言·数据结构
Liangwei Lin18 分钟前
洛谷 P10471 最大异或对 The XOR Largest Pair
算法
sin_hielo19 分钟前
leetcode 3652(定长滑动窗口/前缀和)
数据结构·算法·leetcode
AI科技星19 分钟前
质量定义方程中条数概念的解析与经典例子计算
数据结构·人工智能·经验分享·算法·计算机视觉
啊阿狸不会拉杆20 分钟前
《数字图像处理》第8章-图像压缩和水印
图像处理·人工智能·算法·计算机视觉·数字图像处理