【LeetCode】Integer Break

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

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



 






  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值