题目描述
https://leetcode.cn/leetbook/read/illustration-of-algorithm/5vcapc/
解题思路
本题和上一题最大的区别就是唯一不同在于本题目涉及 大数越界情况下的求余问题 。
循环取余
分成每段长度为3的绳子乘积最大,考虑到取模问题,自定义一个求幂方法,每次循环进行乘法时都进行一次取模,避免越界。
class Solution {
// 循环求余法,每计算一次求一次余数
public long pow(long n, long m) {
long ans = 1;
for(int i = 0; i < m; i++) {
ans = ans * n % 1000000007;
}
return ans;
}
public int cuttingRope(int n) {
if (n <= 3) return n - 1;
int i = n / 3;
int j = n % 3;
long ans = 0;
if (j == 0) ans = pow(3, i);
if (j == 1) ans = pow(3, i - 1) * 4 % 1000000007;
if (j == 2) ans = pow(3, i) * 2 % 1000000007;
return (int) ans;
}
}
快速幂
参照:https://leetcode.cn/leetbook/read/illustration-of-algorithm/5vbrri/