输入一个大于1的整数n,将n分为若干个正整数之和可能有很多种结果,取使这些数相乘最大的结果
题目链接:https://leetcode-cn.com/problems/integer-break/
解法1,时间复杂度O(n)
def integerBreak(n):
if n<=4:
return n
a=1
while n>4: # 分解式中3越多越好,当剩下4或小于4的时候,停止拆分
n-=3
a*=3
return a*n
解法2,时间复杂度O(n)
如999,pow(3,333),3333…
实际当数字很大时,比上面的快很多很多,可能是pow函数的优化?
def integerBreak2(n):
if n <= 4:
return n
if n % 3 == 0:
return pow(3, n//3)
if n % 3 == 1:
return pow(3, n//3) - 1) * 4
if n % 3 == 2:
return pow(3, n//3)) * 2
解法3(leedcode看到的字典一行解法),(leedcode要求至少分成两个数)
class Solution:
def integerBreak(self, n: int) -> int:
return n-1 if n < 4 else 3**(n//3-1)*{0:3, 1:4, 2:6}[n%3]