553. 最优除法](https://leetcode-cn.com/problems/optimal-division/)(2022-2-27)
给定一组**正整数,**相邻的整数之间将会进行浮点除法操作。例如, [2,3,4] -> 2 / 3 / 4 。
但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,才能得到最大的结果,并且返回相应的字符串格式的表达式。你的表达式不应该含有冗余的括号。
示例:
其他用例:
说明:
- 输入数组的长度在 [1, 10] 之间。
- 数组中每个元素的大小都在 [2, 1000] 之间。
- 每个测试用例只有一个最优除法解。
解题思路
这道题不要想的那么难😅,直接看提示,元素大小[2,1000]
,都是正整数,只要保证分母足够的小(毕竟分子是第一个没法变),就可以取得最优最大值。想让分母变小,就让他除以后边的所有数。所以看似这道题是求最优解,实际上只是在加括号,只需要把除了第一项的其余项括起来,目的就达成了
var optimalDivision = function(nums) {
if(nums.length == 1) return nums[0]+''
if(nums.length == 2) return `${nums[0]}/${nums[1]}`
let ret = nums.reduceRight((str,cur,i)=> {
return i == 0 ? `${cur}/(${str}`: `${cur}/${str}`
},'')
return ret.replace(/\/$/,')')
};