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
相关推荐
嫩萝卜头儿9 分钟前
2 - 复杂度收尾 + 链表经典OJ
数据结构·算法·链表·复杂度
星马梦缘21 分钟前
算法设计与分析 作业二 答案与解析
算法·图论·dfs·bfs·floyd-warshall·bellman_ford·多源最短路
玛丽莲茼蒿21 分钟前
Leetcode hot100 每日温度【中等】
算法·leetcode·职场和发展
cjp56029 分钟前
009.UG二次开发,任务环境草图优化3(高级功能生成直线)
算法
样例过了就是过了41 分钟前
LeetCode热题100 分割等和子集
数据结构·c++·算法·leetcode·动态规划
逻辑驱动的ken43 分钟前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
木木_王1 小时前
嵌入式Linux学习 | 数据结构 (Day05) 栈与队列详解(原理 + C 语言实现 + 实战实验 + 易错点剖析)
linux·c语言·开发语言·数据结构·笔记·学习
北顾笙9801 小时前
day38-数据结构力扣
数据结构·算法·leetcode
m0_629494731 小时前
LeetCode 热题 100-----14.合并区间
数据结构·算法·leetcode
xin_nai1 小时前
LeetCode热题100(Java)(5)普通数组
算法·leetcode·职场和发展