返回介绍

solution / 2200-2299 / 2232.Minimize Result by Adding Parentheses to Expression / README

发布于 2024-06-17 01:03:08 字数 4297 浏览 0 评论 0 收藏 0

2232. 向表达式添加括号后的最小结果

English Version

题目描述

给你一个下标从 0 开始的字符串 expression ,格式为 "<num1>+<num2>" ,其中 <num1><num2> 表示正整数。

请你向 expression 中添加一对括号,使得在添加之后, expression 仍然是一个有效的数学表达式,并且计算后可以得到 最小 可能值。左括号 必须 添加在 '+' 的左侧,而右括号必须添加在 '+' 的右侧。

返回添加一对括号后形成的表达式 expression ,且满足_ _expression_ _计算得到 最小 可能值_。_如果存在多个答案都能产生相同结果,返回任意一个答案。

生成的输入满足:expression 的原始值和添加满足要求的任一对括号之后 expression 的值,都符合 32-bit 带符号整数范围。

 

示例 1:

输入:expression = "247+38"
输出:"2(47+38)"
解释:表达式计算得到 2 * (47 + 38) = 2 * 85 = 170 。
注意 "2(4)7+38" 不是有效的结果,因为右括号必须添加在 '+' 的右侧。
可以证明 170 是最小可能值。

示例 2:

输入:expression = "12+34"
输出:"1(2+3)4"
解释:表达式计算得到 1 * (2 + 3) * 4 = 1 * 5 * 4 = 20 。

示例 3:

输入:expression = "999+999"
输出:"(999+999)"
解释:表达式计算得到 999 + 999 = 1998 。

 

提示:

  • 3 <= expression.length <= 10
  • expression 仅由数字 '1''9''+' 组成
  • expression 由数字开始和结束
  • expression 恰好仅含有一个 '+'.
  • expression 的原始值和添加满足要求的任一对括号之后 expression 的值,都符合 32-bit 带符号整数范围

解法

方法一:枚举左右括号的插入位置

class Solution:
  def minimizeResult(self, expression: str) -> str:
    l, r = expression.split("+")
    m, n = len(l), len(r)
    mi = inf
    ans = None
    for i in range(m):
      for j in range(n):
        c = int(l[i:]) + int(r[: j + 1])
        a = 1 if i == 0 else int(l[:i])
        b = 1 if j == n - 1 else int(r[j + 1 :])
        if (t := a * b * c) < mi:
          mi = t
          ans = f"{l[:i]}({l[i:]}+{r[: j + 1]}){r[j + 1:]}"
    return ans
class Solution {
  public String minimizeResult(String expression) {
    int idx = expression.indexOf('+');
    String l = expression.substring(0, idx);
    String r = expression.substring(idx + 1);
    int m = l.length(), n = r.length();
    int mi = Integer.MAX_VALUE;
    String ans = "";
    for (int i = 0; i < m; ++i) {
      for (int j = 0; j < n; ++j) {
        int c = Integer.parseInt(l.substring(i)) + Integer.parseInt(r.substring(0, j + 1));
        int a = i == 0 ? 1 : Integer.parseInt(l.substring(0, i));
        int b = j == n - 1 ? 1 : Integer.parseInt(r.substring(j + 1));
        int t = a * b * c;
        if (t < mi) {
          mi = t;
          ans = String.format("%s(%s+%s)%s", l.substring(0, i), l.substring(i),
            r.substring(0, j + 1), r.substring(j + 1));
        }
      }
    }
    return ans;
  }
}
function minimizeResult(expression: string): string {
  const [n1, n2] = expression.split('+');
  let minSum = Number.MAX_SAFE_INTEGER;
  let ans = '';
  let arr1 = [],
    arr2 = n1.split(''),
    arr3 = n2.split(''),
    arr4 = [];
  while (arr2.length) {
    (arr3 = n2.split('')), (arr4 = []);
    while (arr3.length) {
      let cur = (getNum(arr2) + getNum(arr3)) * getNum(arr1) * getNum(arr4);
      if (cur < minSum) {
        minSum = cur;
        ans = `${arr1.join('')}(${arr2.join('')}+${arr3.join('')})${arr4.join('')}`;
      }
      arr4.unshift(arr3.pop());
    }
    arr1.push(arr2.shift());
  }
  return ans;
}

function getNum(arr: Array<string>): number {
  return arr.length ? Number(arr.join('')) : 1;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文