【LeetCode】Integer Break

来源:互联网 发布:美工切图是什么意思 编辑:程序博客网 时间:2024/05/21 06:29

这道题我是按照数学的思路进行分析的。

数学感觉上很容易觉得,需要把数字分成相等的几部分,例如(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];    }};









1 0