链接
思路
每次减去3
绳子段切分的越多,乘积越大,且3做因数比2更优。
不断剪去 长度3 并用sum累乘
把绳子切为多个长度为 3 的片段,则留下的最后一段绳子的长度可能为 0,1,2 三种情况。
循环结束的三种情况:
n=n-3-->2
n长度剩下2,因 n > 4 跳出循环,return 乘积为sum*2。
n=n-3-->3
长度刚好可以被剪完,因 n > 4 跳出循环,return 乘积为sum*3。
n=n-3-->4
再剪一次的话,长度剩下1,则最后一段绳子长度为 1; 需要把最后的 3 和 1 替换为 2 和 2,因为 2 * 2 > 3 * 1; 因次最后一段不减3,而是作为22即4,直接乘4, n > 4 跳出循环,return 乘积 sum4 即可。
代码
class Solution {
public int cuttingRope(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
if (3 == n)
{
return 2;
}
int ret = 1;
while (n > 4)
{
ret *= 3;
n -= 3;
}
return ret * n;
}
}