leetcode343整数拆分(和固定乘积最大)

整数拆分

题目连接

题目描述

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

示例 1:
输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。

示例 2:
输入: 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
说明: 你可以假设 n 不小于 2 且不大于 58。

解题思路

按照我们的认识,应该是分的越均匀越好,而且尽量不要出现1,因为1会占用和,但是不会增大积。
leetcode343整数拆分(和固定乘积最大)_第1张图片

代码如下

class Solution {
public:
    int integerBreak(int n) {
        if(n==2) return 1;
        if(n==3) return 2;
        if(n==4) return 4;
        else {
            int num = 0;
            int ans = 1;
            while(n-3>=0) {//看看可以有多少个3,n-3>=0防止出现负数
                n-=3;
                num++;
            }
            if(n == 0) {//剩下的数是0
                for(int i = 1; i<= num; i++) {
                    ans *= 3;
                }
            } 
            else if(n == 1) {//如果剩下的数是1,那么我们就拿出1个3与1凑出一个4 这很明显是大于1*3的。
                for(int i = 1; i<= num-1; i++) {
                    ans *= 3;
                }
                ans *= 4;
            }
            else if(n == 2) {//剩下的数是2
                for(int i = 1; i<= num; i++) {
                    ans *= 3;
                }
                ans *= 2;
            }
            return ans;
        }
    }
};

你可能感兴趣的:(算法,leetcode)