剑指 Offer 14- I. 剪绳子
该题本质就是求组成n的和子集乘积最大化
分析
长度 | 组合 | 最大乘积 |
---|---|---|
2 | 1x1 | 1 |
3 | 1x2 | 2 |
4 | 2x2 | 4 |
5 | 3x2 | 6 |
6 | 3x3 | 9 |
7 | 3x2x2 | 12 |
8 | 3x3x2 | 18 |
9 | 3x3x3 | 27 |
10 | 3x3x4 | 36 |
11 | 3x3x3x2 | 45 |
通过以上列举找规律发现 当n>6时,f(n) = 3*f(n-3)
实现
public int cuttingRope(int n) {
int[] num = new int[7];
num[0] = 0;
num[1] = 0;
num[2] = 1;
num[3] = 2;
num[4] = 4;
num[5] = 6;
num[6] = 9;
if(n<7){
return num[n];
}
int[] nums = new int[n+1];
for(int i=0;i<7;i++){
nums[i] = num[i];
}
for(int i=7;i<=n;i++){
nums[i] = 3*nums[i-3];
}
return nums[n];
}