剑指 Offer 14- I. 剪绳子
和整数拆分是同一道题。
动态规划
class Solution {public int cuttingRope(int n) {int[] dp = new int[n + 1]; // dp[i]表示长度为i的绳子能得到的最大乘积dp[2] = 1;for(int i = 3; i <= n; i++){for(int j = 2; j < i; j++){dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i - j]));}}return dp[n];}
}
贪心
每次拆出3是最优的。不过注意4不用拆,拆了反而会变小。
class Solution {public int cuttingRope(int n) {if(n == 2) return 1;if(n == 3) return 2;int res = 1;while(n > 4){n -= 3;res *= 3;}res *= n;return res;}
}