剑指 Offer 14- I. 剪绳子

剑指 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];
 }
原文地址:https://www.cnblogs.com/zincredible/p/13324722.html