553. 最优除法
解题过程
INFO
题目链接 给定一正整数数组 nums,nums 中的相邻整数将进行浮点除法。例如,[2,3,4] -> 2 / 3 / 4
。 例如,nums = [2,3,4]
,我们将求表达式的值"2/3/4"
。 但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,以便计算后的表达式的值为最大值。 以字符串格式返回具有最大值的对应表达式。 注意:你的表达式不应该包含多余的括号
javascript
/**
* @link https://leetcode.cn/problems/optimal-division/
* @title 553. 最优除法
* @description 给定一正整数数组 nums,nums 中的相邻整数将进行浮点除法。例如, [2,3,4] -> 2 / 3 / 4 。
例如,nums = [2,3,4],我们将求表达式的值 "2/3/4"。
但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,以便计算后的表达式的值为最大值。
以字符串格式返回具有最大值的对应表达式。
注意:你的表达式不应该包含多余的括号
* @param {number[]} nums
* @return {string}
*/
// 解法一
// 思路:直接将数组第一项作为被除数,其余项作为除数即可,简单明了
var optimalDivision = function (nums) {
if (nums.length <= 2) {
return nums.join('/')
}
const [divided, ...divisors] = nums
return divided + '/(' + divisors.join('/') + ')'
}
// 解法二
// 思路:优化解法一代码
var optimalDivision = function (nums) {
const newNumStr = nums.join('/')
const index = newNumStr.indexOf('/')
return nums.length > 2 ? newNumStr.slice(0, index) + '/(' + newNumStr.slice(index + 1) + ')' : newNumStr
}
// const result = optimalDivision([1000,100,10,2]) // 1000/(100/10/2)
const result = optimalDivision([2, 3, 4]) // 2/(3/4)
// const result = optimalDivision([3, 2]) // 3/2
// const result = optimalDivision([2]) // 2
console.log(result)
解题感受
一开始以为,值最大,不就是除数最小,然后第二项到最后一项括号起来就好了,但考虑到这是中等一题,不会这么简单吧,从第二项到最后一项会不会还要添加什么判断之类的,尝试做了,竟然成功了。看了评论区也啥都不用很复杂的逻辑,就这么简单,脑筋急转弯题目确实。看了官方题解动态规划确实太复杂了,估计写完这些代码都要一两个小时来做没必要