zoukankan      html  css  js  c++  java
  • [LeetCode]Integer Break

    题目:Integer Break

    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 and not larger than 58.

    题意:将一个正整数分解成k个正整数的和的形式使得这些正整数的乘积最大,输出他们的积。

    思路:

    他更像一个数学题;

    首先什么样的数的乘积最大呢?

    如果是2,则不分解,它本身最大;

    如果是3,则不分解,它本身最大;

    如果是4,则不分解,它本身最大;

    如果是5,则分解成2和3,乘积是6最大;

    如果是6,则分解成3和3,乘积是9最大;

    ...

    到这里就可以看出来,分解成只有2和3的数的乘积是最大的,而且优先分解成3直到只剩下一个2,此时才是最优解。

    int integerBreak(int n){
        if (n < 2)return 0;
        if (n < 4)return n - 1;
        if (n == 4)return 4;
        int k = n / 3;
        if (n % 3 == 1){
            return 4 * pow(3, k - 1);
        }
        else if (n % 3 == 2){
            return 2 * pow(3, k);
        }
        return pow(3, k);
    }
  • 相关阅读:
    C++ 声明、定义、初始化、赋值
    skynet源码赏析
    python基础6函数 柒哥
    Python基础4数据类型详解下 柒哥
    Python基础1变量 柒哥
    Python基础2数据类型 柒哥
    Python基础3数据类型详解上 柒哥
    Python基础5条件分支与循环 柒哥
    PHP面试(A02)
    Envoy 配置
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/7350768.html
Copyright © 2011-2022 走看看