leetcode-剪绳子 II-58
Posted 天津 唐秙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-剪绳子 II-58相关的知识,希望对你有一定的参考价值。
题目要求
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
思路
我们由剪绳子1已经知道绳子尽可能多的分为3m所得到的乘积最大,前2,3,4米均可以算作特殊值处理,我们只需要判断长度为n的绳子能减成多少个3m,就可以得到结果。
代码实现
class Solution {
public:
int cuttingRope(int n) {
if (n == 2)
return 1;
if (n == 3)
return 2;
if (n == 4)
return 4;
long long result = 1;
while (n >= 5)
{
result = (result * 3) % 1000000007;
n -= 3;
}
result = (result * n) % 1000000007;
return result;
}
};
以上是关于leetcode-剪绳子 II-58的主要内容,如果未能解决你的问题,请参考以下文章