Integer Break | leetcode

原题

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.

分析

这道题其实我们是可以找规律的,竟可能多的3,但是剩余的数又不能为1,所以定义规则如下就能够保证所求的结果最优:
对3取模,余数为1,那么就其中一个数拆分为4,其余的都为3
如果余数为2,那么其中一个数拆分为2,其余都为3.

证明

(n/x)^(n/x)的极值,其中x>=2,x<=n,n>3保证竟可能的均匀,这样才能保证结果最大。

实现

class Solution {
public:
    int integerBreak(int n) {
        if(n==2)
            return 1;
        if(n==3)
            return 2;
        int b=n%3;
        int result=INT_MIN;
        if(b==0){
            result = pow(3,n/3);            
        }else if(b==1){
            result = 4*pow(3,n/3 -1);
        }else{
            result = 2*pow(3,n/3);
        }
        return result;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值