题目描述:
思路:一开始想法是直接在上一条基础上除个1000000007就行了,但是注意到下面n的上线从58提高到了1000之后就明白了,这是需要考虑计算过程中超出int大小的情况。题解中看到可以用BigInteger来做,没错是可以,但是效率低。那么如何处理计算过程中越界的情况呢?
附上官方题解代码
class Solution {
public int cuttingRope(int n) {
if(n <= 3) return n - 1;
int b = n % 3, p = 1000000007;
long rem = 1, x = 3;
for(int a = n / 3 - 1; a > 0; a /= 2) {
if(a % 2 == 1) rem = (rem * x) % p;
x = (x * x) % p;
}
if(b == 0) return (int)(rem * 3 % p);
if(b == 1) return (int)(rem * 4 % p);
return (int)(rem * 6 % p);
}
}