题目内容
Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.
For example, given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3 + 4).
Note: you may assume that n is not less than 2.
题目分析
给出一个数,然后将这个数分成2个或2个以上数字的和的变现形式,从而得到的这些较小的数字,通过这些数字的乘积得到一个新的数字。因为一个整数n可能有多种拆分的形式,所以取,乘积最大为结果。
可以进行数学归纳,发现,一个数字都可以由2和3,来构成,4 可以通过两个2来组成,已经不是最简单的元素了可以拆分,所以这个题也就有思路了。
接下来开始判断,如何组合值比较大,发现。在4以下用2来组合,值最大,4以上用3组合值最大。
然后就可以开始写代码了,凑最多的3,剩下的用2来凑,如果是1,那就把这个1加给最后的那个3.
挖坑的地方 大数问题
这道题可以有个变种,由于leetcode已经给出了返回值是int,所以,直接做就可以了。如果没有说返回值,而是告诉你n的范围,比如最大值可以为300,那么这就是3的100次方
这里就编程了大数问题,需要会写大数。
public class Solution {
public int integerBreak(int n) {
if (n==2) return 1;
if (n==3) return 2;
if (n==4) return 4;
int num=n/3;
int mark=n%3;
int ans=1;
for (int i = 0; i < num-1; i++) {
ans*=3;
}
if (mark==1) {
ans*=4;
}
if (mark==0) {
ans*=3;
}
if (mark>1) {
ans*=3;
ans*=mark;
}
return ans;
}
}