这道题我是按照数学的思路进行分析的。
数学感觉上很容易觉得,需要把数字分成相等的几部分,例如(6最好分成(3,3),或者(2,2,2))。</p><p>为什么这么分,以为如果分的不相等例如6分成(1,5)肯定不是最优解。
因而,需要求解的目标为
其实就是例如,16拆分成3+3+3+3+4。
证明最好证明的部分吧。
然而写程序验证发现除了前10项中少数几个2占优势,其他的都未3占优势。然后自然的想法是列一下表,然后再测试的时候发现。。。。。。。。
没超过几个数就溢出了。。。。。。so。程序就搞成下面这个样子,一点不数学美观!
第一次在CSDN上写东西。就这样。(C++菜菜)
class Solution {
public:
int integerBreak(int n) {
int result[59] = {1,1,1,2,4,6,9,12,18,27,36,54,81,108,162,243,324,486,729,972,1458,2187,2916,4374,6561,8748,13122,19683,26244,39366,59049,78732,118098,177147,236196,354294,531441,708588,1062882,1594323,2125764,3188646,4782969,6377292,9565938,14348907,19131876,28697814,43046721,57395628,86093442,129140163,172186884,258280326,387420489,516560652,774840978,1162261467,1549681956};
return result[n];
}
};