• 25. 剪绳子


    题目描述

    给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n 都是整数,2≤n≤58 并且 m≥2)。

    每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1] … k[m] 可能的最大乘积是多少?

    例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。


    样例

    输入:8

    输出:18

    思路

      这题考察数学知识,当length>3时,length可分解为只有3和2的组合,这样得到的乘积是最大的,而2的个数最多为两个. 因为3*1<2*2,所以当length%3=1时,应该将4拆解为2和2,当length%3=2时,刚好可以拆解成多个3和一个2.

      据说还能用动态规划做,不过我还不会,先记着这个结论吧.

     1 class Solution {
     2 public:
     3     int maxProductAfterCutting(int length) {
     4         if(length<=3) return length-1; 
     5         int res=1;
     6         if(length%3==1) {
     7             res*=4;
     8             length-=4;
     9         }
    10         else if(length%3==2) {
    11             res*=2;
    12             length-=2;
    13         }
    14         int num=length/3;
    15         res*=pow(3, num);
    16         return res;
    17     }
    18 };
  • 相关阅读:
    MongoDB Driver快速浏览
    字符串方法
    内置函数-sorted()和reversed()
    列表相关
    内置函数-eval()
    内置函数-zip
    内置函数-map
    列表
    内置函数-enumerate
    选择结构与循环结构
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/13664281.html
Copyright © 2020-2023  润新知