第六十六題:給你一根長(zhǎng)度為n的繩子饰剥,請(qǐng)把繩子剪成整數(shù)長(zhǎng)的m段(m、n都是整數(shù)摧阅,n>1并且m>1)汰蓉,每段繩子的長(zhǎng)度記為k[0],k[1],...,k[m]。請(qǐng)問(wèn)k[0]xk[1]x...xk[m]可能的最大乘積是多少棒卷?例如顾孽,當(dāng)繩子的長(zhǎng)度是8時(shí),我們把它剪成長(zhǎng)度分別為2比规、3若厚、3的三段,此時(shí)得到的最大乘積是18蜒什。
輸入描述:輸入一個(gè)數(shù)n测秸,意義見(jiàn)題面。(2 <= n <= 60)
輸出描述:輸出答案。
public class Solution {
public int cutRope(int target) {
//target=2時(shí)霎冯,max=1*1=1铃拇,
//target=3時(shí),max=1*2=2.
if(target <= 3){
return target-1;
}
//定義最大結(jié)果值
int max = 0;
//第一段長(zhǎng)度從1到[target/2]遍歷
for(int i=1; i < (target/2+1); i++){
//將當(dāng)前最大值與當(dāng)前分成的兩段長(zhǎng)度乘積比較大小沈撞,取大值更新max
max = Math.max(max, i*(target-i));
//將后面一段繩子再進(jìn)行分割锚贱,遞歸調(diào)用cutRope獲取其分割后最大乘積值
int nextMax = cutRope(target-i);
//將當(dāng)前最大值與nextMax比較大小,取大值更新max
max = Math.max(max, i*nextMax);
}
return max;
}
}