题目描述

https://leetcode.cn/leetbook/read/illustration-of-algorithm/5vcapc/
image.png

解题思路

本题和上一题最大的区别就是唯一不同在于本题目涉及 大数越界情况下的求余问题

循环取余

分成每段长度为3的绳子乘积最大,考虑到取模问题,自定义一个求幂方法,每次循环进行乘法时都进行一次取模,避免越界。

  1. class Solution {
  2. // 循环求余法,每计算一次求一次余数
  3. public long pow(long n, long m) {
  4. long ans = 1;
  5. for(int i = 0; i < m; i++) {
  6. ans = ans * n % 1000000007;
  7. }
  8. return ans;
  9. }
  10. public int cuttingRope(int n) {
  11. if (n <= 3) return n - 1;
  12. int i = n / 3;
  13. int j = n % 3;
  14. long ans = 0;
  15. if (j == 0) ans = pow(3, i);
  16. if (j == 1) ans = pow(3, i - 1) * 4 % 1000000007;
  17. if (j == 2) ans = pow(3, i) * 2 % 1000000007;
  18. return (int) ans;
  19. }
  20. }

快速幂

参照:https://leetcode.cn/leetbook/read/illustration-of-algorithm/5vbrri/