剑指 Offer 14- II. 剪绳子 II

这道题最优解是贪心+快速幂。

但贪心算法还必须清楚背后的数学定理才会有思路,没意思。

学习如何用大数BigInteger和快速幂的代码即可。(虽然我没用到快速幂)

注意必须对数组手动初始化,因为不会帮你默认初始化,不手动初始化在n=10时会出错嗯。

 1 import java.math.*;
 2 class Solution {
 3     public int cuttingRope(int n) {
 4         BigInteger[] dp =new BigInteger[n+1];
 5         Arrays.fill(dp,BigInteger.valueOf(1));
 6         //dp[2]=BigInteger.valueOf(1);只初始化这个不可以
 7         for(int i=3;i<n+1;i++){
 8             for(int j=2;j<i;j++)
 9                 dp[i]=dp[i].max(BigInteger.valueOf(j*(i-j))).max(BigInteger.valueOf(j).multiply(dp[i-j]));
10         }
11         return dp[n].remainder(BigInteger.valueOf(1000000007)).intValue();
12     }
13 }

快速幂学习:

https://blog.csdn.net/qq_19782019/article/details/85621386

大整数基本用法:

https://wutao18.github.io/2019/08/15/%E5%A4%A7%E6%95%B0%E8%BF%90%E7%AE%97%E4%B9%8B-Java-BigInteger-%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95/

http://gitbook.net/java/math/biginteger_max.html

上一篇:第十二次总结


下一篇:C++字符串相乘(不使用任何标准库的大数类型(比如 BigInteger)也不直接将输入转换为整数)