1. 题目描述
2. 算法思路
这题的整体思路和上一题基本一致。参照 剪绳子1
区别在于,这题需要大数越界的情况进行处理,采取”循环取余“。
其实”循环取余“处理大数的方法,并非第一次使用,在我之前的 10 -2 青蛙跳台阶问题 中就使用过。
因此接下来只需要对 剪绳子1 的代码进行修改即可。
3. 代码
class Solution {
public int cuttingRope(int n) {
if(n == 2) return 1;
if(n == 3) return 2;
int p = (int)1e9 + 7; //得到题目给出的最大值
long res = 1L;
while(n > 4){
res = res * 3 % p;
n = n - 3;
}
//此时的n = 2 ,3 ,4
return (int)(res * n % p);
}
}
4. 测试结果