整数拆分
听说美团面试题有考这个,所以想刷一刷这种题型。
题目如下:
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。
示例 1:
输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:
输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
分析:
我们可以先看看前面几个数的拆分情况。2=1*1,3=1*2,4=2*2,5=2*3,6=3*3,7=3*2*2,8=2*3*3,9=3*3*3
由此,我们可以看出2,3是无法再进行拆分的,所以我们可以把数拆成尽可能多的3,对于3不能拆的部分则拆成2*2即可。
利用贪心进行求解就是 数 n/3=x 余数为y
有三种可能 余数y分别为 0,1,2
若余数为0 即9=3*3*3 这种情况 最大解=3**x
若余数为1 由7=3*2*2 可知 我们要把最后一个3 和1分为2*2才能得到最大解 即3**(x-1)*2*2
若余数为2 最大解为3**x*2
代码:
def integerBreak(n): if n <= 3 : return n-1 x = n // 3 y = n %3 if y == 0: return 3**x if y == 1: return 3**(x-1) return 3**x*2

浙公网安备 33010602011771号