刷题笔记(18)--剪绳子II(贪心)
Posted HardyDragon_CC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题笔记(18)--剪绳子II(贪心)相关的知识,希望对你有一定的参考价值。
这题和前面的剪绳子 n 的取值范围不同,涉及到了大数会越界的问题,需要每次都对其取余。
- n = 2时,特殊解为1 * 1 = 1;n = 3时,特殊解为 1 * 2 = 2;n=4 , 2 * 2=4;
- n > 4时,最优解应该是包含尽可能多的长度为 3 的子绳。例如 n = 6 ,最优解为
3 * 3
,而不是2 * 2 * 2
; - 使用 long 存储结果还不够,还需要做到每次的中间结果都取余。
class Solution {
public int cuttingRope(int n) {
// 对于 2 3 返回 1 和 2是特殊解
if(n <= 3) return n-1;
// res 使用 long 防止中间结果取余后过大
long res = 1;
// 对 长度大于4的,尽可能分解多的长度3
while(n > 4){
res *= 3;
// 每步都要取余,防止中间结果超出 long 取值范围
res = res % 1000000007;
n -= 3;
}
// 最后对 long 转换类型,依然要取余。
return (int)(res * n % 1000000007);
}
}
以上是关于刷题笔记(18)--剪绳子II(贪心)的主要内容,如果未能解决你的问题,请参考以下文章