Leetcode算法——Leetcode算法——553. 最优除法
题目
思路
数学问题
因为所有的数字都是由除法链接,所以不管分子如何变化,都可以将除第一个元素之外的元素移到分母。例
a
/
(
b
/
c
)
d
=
a
(
b
/
c
)
×
d
\frac{a/(b/c)}{d} = \frac{a}{(b/c) \times d}
da/(b/c)=(b/c)×da。所以输出结果的分子确定为列表中第一个元素,则什么时候这个数字能取到最大呢?分子确定时,分母越小整体越大,因为给定原始列表内元素都大于等于2所以将第第二个数字一直除以后面的所有数即可取到最小的分母。
注意,str.join(sequence)
,join函数将字符串str插入列表sequence每个元素之间(首尾不会添加)并返回拼接形成的字符串。
例
"!sfr!".join(["hust", "cs", "sorth", "cv"])
# 输出:hust!sfr!cs!sfr!sorth!sfr!cv
Python3解法
def optimalDivision(self, nums: List[int]) -> str:
if len(nums)==1:
return str(nums[0])
if len(nums)==2:
return '/'.join(map(str,nums))
result = list(map(str,nums))
result[1]='('+result[1]
return '/'.join(result)+')'