劍指offer-剪繩子問題(Java)
阿新 • • 發佈:2018-11-07
文章目錄
問題描述
給你一根長度為n的繩子,請把繩子剪成m段 (m和n都是整數,n>1並且m>1)每段繩子的長度記為k[0],k[1],…,k[m].請問k[0]k[1]…*k[m]可能的最大乘積是多少
解析
如果我們按照如下的策略來剪繩子,則得到的各個段繩子的長度的乘積將最大:當n>=5時,我們儘可能多的剪長度為3的繩子;當剩下的繩子長度為4時,把繩子剪成兩段長度為2的繩子。
程式碼
private int maxProductAfter(int n) { if (n < 2) { return 0; } if (n == 2) { return 1; } if (n == 3) { return 2; } int times3Of = n / 3; if (n % 3 == 1) { return (int) Math.pow(3, (times3Of - 1)) * 4; } if (n % 3 == 0) { return (int) Math.pow(3, times3Of); } return (int) Math.pow(3, times3Of) * 2; }