参考题解,本题使用数学思维解析。
根据题意,需要把正整数n分为k个正整数的和(k>=2),并且要使这些整数的乘积最大化。
那么,问题是:怎么拆?
由于还未学习动态规划,我只能参考题解中求导方式来理解这个题。
怎么拆?
将n按某个数均等分可使乘积最大化。
则得出 n=a*x;将n分为a个x的和,当然这里理想化处理了,n不一定能整除x。
接下来讨论n与3的关系:
若n=2;只有一种情况:2=1+1 ;最终乘积为1;
若n=3;3=1+1+1;3=1+2 ;乘积最大为2;
可知二者返回值都是n-1;
然后分析n/3:
若余数为0;则将n全分为3;
若余数为1;则n分为一些3的和加上1,但是由于1*3<2*2,所以我们要把n原本拆分的3减掉一个,变为2*2;
若余数为2;则n分为一些3的和加上2,没有问题。
代码如下:
本题解析完,详细题解参考力扣。