经典的动态规划和贪婪算法
思路:长度2有0种,长度3可以分成1,2或者1,1,1,有两种,长度4有三种,将最优解存起来,第二个循环根据前面的最优解找到本次的最优解存起来
function cutRope(number)
{
// write code here
if(number<=3){
return number-1
}
//记录每一个number的乘积的最大值
let arrMax=[0,1,2,3]
let max=0
//第一个循环往arrMax填入最大值
for(let i=4;i<=number;i++){
max=0
//第二个循环找出最大值
for(let j=1;j<=i/2;j++){//分成左右两部分
//右半部分和左半部分乘积
let multi=arrMax[j]*arrMax[i-j]
max=Math.max(multi,max)
}
arrMax[i]=max//最大值记录
}
max=arrMax[number]
return max
}
思路:如果超过5的话,那么其实都拆分成了3 和 2 因为3(n-3)>n,3(n-3)>=2(n-2) 所以我们全部拆分成3 或者 2 如果是10,那么不能拆分成3 3 3 1 而要拆分成 3 3 2 2
function cutRope(number)
{
// write code here
if(number<=3){
return number-1
}
let countOf3=~~(number/3)
if(number-countOf3*3==1){
countOf3--
}
let countOf2=~~((number-countOf3*3)/2)
return Math.pow(3,countOf3)*Math.pow(2,countOf2)
}