public static int getMax(int len) {
if (len == 1) {
return 0;
}
if (len == 2) {
return 1;
}
if (len == 3) {
return 2;
}
int[] arr = new int[len + 1];
// 为什么会有这些初始值, 因为能到执行到这里说明 len > 3,
// 而对一下面每一个数而言,切到这里就此为止才能得到最大值.
// 如果一开始len <= 3, 而题目要求是至少切一刀,所以他非切不可,
// 这就是上面和下面结果不一致的原因
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
int max;
for (int i = 4; i <= len; i++) {
max = 0;
for (int j = 1; j <= i/2; j++) {
max = Math.max(arr[j] * arr[i - j], max);
}
arr[i] = max;
}
return arr[len];
}
剑指offer - 剪绳子 问题的一个细节
最新推荐文章于 2022-02-26 11:29:57 发布