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

简介: 🎈今天给大家带来的是算法练习,题目为"向表达式添加括号后的最小结果"。

说在前面

🎈今天给大家带来的是算法练习,题目为"向表达式添加括号后的最小结果"。

题目描述

给你一个下标从 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 带符号整数范围

思路分析

题目要求其实很简单,就是我们可以在式子中加一个加一对括号,要求是括号必须在加号的两边,然后要我们求加括号后算出的结果为最小的式子。\
总结一下就是式子可以写成n1(n2+n3)n4(n2+n3)n4n1(n2+n3) 这三种形式,我们只需要枚举每一种分割情况,然后记录最小值结果,维护最小值式子即可。\
如示例1的"247+38",总共有这么几种情况:

  • (247+38)->285
  • (247+3)8->2000
  • 2(47+38)->170
  • 2(47+3)8->800
  • 24(7+38)->1080
  • 24(7+3)8->1920

枚举完所有情况之后我们就能很清楚的知道答案就是2(47+38)

AC代码

/**
 * @param {string} expression
 * @return {string}
 */
var minimizeResult = function (expression) {
  const num = expression.split("+");
  const num1 = num[0].toString();
  const num2 = num[1].toString();
  let res = parseInt(num[0]) + parseInt(num[1]);
  let ans = "(" + expression + ")";
  for (let i = 1; i <= num1.length; i++) {
    let n1 = parseInt(num1.slice(0, i)),
      n2 = parseInt(num1.slice(i)) || "";
    for (let j = 0; j <= num2.length; j++) {
      let n3 = parseInt(num2.slice(0, j) || Infinity),
        n4 = parseInt(num2.slice(j));
      let sum = n1 * (n2 + n3) * (n4 || 1);
      if (n2 == "") sum = (n1 + n3) * (n4 || 1);
      if (res > sum) {
        if (n2 != "") ans = n1 + "(" + n2 + "+" + n3 + ")";
        else ans = "(" + n1 + "+" + n3 + ")";
        if (n4) ans += n4;
        res = sum;
      }
    }
  }
  return ans;
};

说在后面

🎉这里是JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
缓存 Java 数据库连接
深入浅出 MyBatis 的一级、二级缓存机制
深入浅出 MyBatis 的一级、二级缓存机制
707 0
|
数据处理 Python
Pandas数据处理 | apply() 函数用法指南!
本文介绍一下关于 Pandas 中 apply() 函数的几个常见用法,apply() 函数的自由度较高,可以直接对 Series 或者 DataFrame 中元素进行逐元素遍历操作,方便且高效,具有类似于 Numpy 的特性。
|
机器学习/深度学习 Kubernetes PyTorch
解决在Docker或者Kubernetes中使用PyTorch训练深度学习模型共享内存不足的问题
异常信息 ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm) 问题原因
|
Java Linux Shell
Linux开发和编程指南:搭建环境、Shell脚本与常见编程语言配置及使用
Linux开发和编程指南:搭建环境、Shell脚本与常见编程语言配置及使用
2696 0
|
监控 关系型数据库 MySQL
走进RDS之MySQL内存分配与管理(下)
本篇为下篇,主要对MySQL内存限制特性进行解读,代码基于8.0.28。本文将围绕该项工作的改动、设计实现等方面展开介绍。
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发知识点学习总结
107 0
|
存储 分布式计算 负载均衡
HDFS服役新数据节点和退役旧节点步骤
HDFS服役新数据节点和退役旧节点步骤
547 1
|
开发工具
阿里云的镜像服务(mirrors.aliyun.com)可以同步 Google Cloud SDK 的软件包
阿里云的镜像服务(mirrors.aliyun.com)可以同步 Google Cloud SDK 的软件包
4318 3
|
数据可视化 Python
可视化 | 中国历届夏季奥运会奖牌数据(树图)
可视化 | 中国历届夏季奥运会奖牌数据(树图)
直播源码app开发技术之特效功能的实现
想必说到这里大家都明白我说的这一个情况是直播源码app平台的哪一个常见的功能了,没错,这个功能就是直播源码app平台的特效功能,这个功能对于开发直播源码app平台是非常重要的,废话不多说,下面我就为大家分享直播源码app开发技术特效功能的实现。
直播源码app开发技术之特效功能的实现