[leetcode]第九周作业
2017-11-04 22:53
337 查看
题目
来源: < leetcode > 343 . Integer BreakGiven a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.
For example,
given n = 2, return 1 (2 = 1 + 1); given n = 10, return 36 (10 = 3 + 3+ 4).
Note: You may assume that n is not less than 2 and not larger than 58.
分析与代码
方法一:令dp
为n对应的加数最大积。
那么递推方程就是:dp
=max(i*dp[n-i],i*(n-i)) (1<=i<=n-1)。
边界: dp[1]=1 dp[2] =1
public int integerBreak(int n) { int[] dp = new int[n + 1]; dp[1] = 1; for(int i = 2; i <= n; i ++) { for(int j = 1; j < i; j ++) { dp[i] = Math.max(dp[i], (Math.max(j,dp[j])) * (Math.max(i - j, dp[i - j]))); } } return dp ; }
方法二:
解法来自网上,纯数学方法
看n包含多少个3,把他们相乘,直到n<=2
class Solution { public: int integerBreak(int n) { if(n < 4) return n-1; int res = 1; while(n > 2){//看n包含多少个3,把他们相乘,直到n<=2 res *= 3; n -= 3; } if(n == 0) return res;//n可以整除3,res就是各个3相乘 if(n == 1) return (res / 3 ) * 4;//除3余1,把其中的一个3加1变为4再相乘 if(n == 2) return res * 2;//除3余2,则可直接把2与res相乘 } };
相关文章推荐
- Leetcode 718. Maximum Length of Repeated Subarray(第九周作业)
- 第九周作业2(LeetCode4)
- 第九周作业1(LeetCode14)
- 【算法作业6】LeetCode 121. Best Time to Buy and Sell Stock
- 学科导论第九周作业
- 自动1122徐达武第九周作业
- 第九周作业
- 第九周作业
- leetcode【第九周】矩阵元素置零
- 马哥2016全新Linux+Python高端运维班第九周作业
- 第九周作业
- 第九周软件工程作业-每周例行报告
- 第九周:[Leetcode]523. Continuous Subarray Sum
- 第九周作业3
- 第九周作业
- 第九周作业
- Leetcode 75.Sort Colors(第十二周作业)
- leetcode作业完成在这个blog //更新于17.1.8
- leetcode-第九周
- 算法作业HW25:LeetCode 26. Remove Duplicates from Sorted Array