「每日LeetCode」2022年2月27日

本文最后更新于:2023年3月19日 晚上

  1. 最优除法

553. 最优除法

给定一组正整数,相邻的整数之间将会进行浮点除法操作。例如, [2,3,4] -> 2 / 3 / 4 。
但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,才能得到最大的结果,并且返回相应的字符串格式的表达式。你的表达式不应该含有冗余的括号。
示例:
输入: [1000,100,10,2] 输出: “1000/(100/10/2)” 解释: 1000/(100/10/2) = 1000/((100/10)/2) = 200 但是,以下加粗的括号 “1000/((**100/10)/2)” 是冗余的, 因为他们并不影响操作的优先级,所以你需要返回 “1000/(100/10/2)”。 其他用例: 1000/(100/10)/2 = 50 1000/(100/(10/2)) = 50 1000/100/10/2 = 0.5 1000/100/(10/2) = 2
**说明:

  1. 输入数组的长度在 [1, 10] 之间。
  2. 数组中每个元素的大小都在 [2, 1000] 之间。
  3. 每个测试用例只有一个最优除法解。

思路

因为数组中的元素都是大于 1 的,所以要让元素大只要让除以的数尽量小即可,即除以第一个元素后的所有元素除法的结果即可。

解答

1
2
3
4
5
6
7
8
9
10
/**
* @param {number[]} nums
* @return {string}
*/
var optimalDivision = function (nums) {
let str = "";
if (nums.length > 2) str = `/(${nums.slice(1).join("/")})`;
else if (nums.length === 2) str = `/${nums.slice(1).join("/")}`;
return `${nums[0]}${str}`;
};