题目描述:
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
知识点:
- 本质上是动态规划
解题思路:
- 通过观察我们可以发现,将绳子分为长度为3最后的乘积便是最大的
- 所以就有三种情况,就是刚好分完,剩下长度为2,剩下长度为4
- 如果可以剩下长度为4那么就乘以4,如果剩下长度为2那么就乘以2
解题代码:
if(number === 2) return 1;
if(number === 3) return 2;
let a = Math.floor(number / 3);
let b = number % 3;
switch(b) {
case 0:return Math.pow(3,a);
case 2:return Math.pow(3,a)*2;
case 1:return Math.pow(3,a-1)*4;
}
- 递归版
function cutRope(number) { if(number === 2) return 1; if(number === 3) return 2; let res = 1; while(number > 4) { res = res * 3; number -= 3; } return res * number; }