劍指offer | 剪繩子

剪繩子

描述

給你一根長度爲n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1),每段繩子的長度記爲k[0],k[1],…,k[m]。請問k[0]xk[1]x…xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別爲2、3、3的三段,此時得到的最大乘積是18。

代碼 (Java)

public class Solution {
    public int cutRope(int target) {
        if (target < 2)
            return 0;
        if (target == 2)
            return 1;
        if (target == 3)
            return 2;
        
        // 儘可能多地減去長度爲3的長度
        int timesOf3 = target / 3;
        // 長度爲4時,2*2 > 3*1
        if (target % 3 == 1)
            timesOf3 -= 1;
        
        int timesOf2 = (target - timesOf3 * 3) / 2;
        
        return (int)(Math.pow(3, timesOf3) * Math.pow(2, timesOf2));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章