Integer Break解题报告
来源:互联网 发布:驱动安装软件 编辑:程序博客网 时间:2024/05/20 15:40
https://leetcode.com/problems/integer-break/
这道题有一个提示:You may check the breaking results of n ranging from 7 to 10 to discover the regularities.
我们来从1到10来分别进行拆分:
正整数从1开始,但是1不能拆分成两个正整数之和,所以不能当输出。
那么2只能拆成1+1,所以乘积也为1。
数字3可以拆分成2+1或1+1+1,显然第一种拆分方法乘积大为2。
数字4拆成2+2,乘积最大,为4。
数字5拆成3+2,乘积最大,为6。
数字6拆成3+3,乘积最大,为9。
数字7拆为3+4,乘积最大,为12。
数字8拆为3+3+2,乘积最大,为18
数字9拆为3+3+3,乘积最大,为27。
数字10拆为3+3+4,乘积最大,为36。
....
那么通过观察上面的规律,我们可以看出从5开始,数字都需要先拆出所有的3,一直拆到剩下一个数为2或者4,因为剩4就不用再拆了,拆成两个2和不拆没有意义,而且4不能拆出一个3剩一个1,这样会比拆成2+2的乘积小。那么这样我们就可以写代码了,先预处理n为2和3的情况,然后先将结果res初始化为1,然后当n大于4开始循环,我们结果自乘3,n自减3,根据之前的分析,当跳出循环时,n只能是2或者4,再乘以res返回即可。
class Solution {public: int integerBreak(int n) { if(n==2||n==3) return n-1; int res=1; while(n>4){ res*=3; n-=3; } return res*n; }};也可以考虑动态规划的方法,用一个数组来记录第i个数被拆分之后的最大乘积。则res[i]=max(res[i],res[j]*res[i-j],res[j]*(i-j),res[i-j]*j,j*(i-j))。
class Solution {public: int integerBreak(int n) { if(n<2) return 0; vector<int> res(n+1,0); res[0]=0; res[1]=1; res[2]=1; for(int i=3;i<=n;i++){ for(int j=1;j<i;j++){ int t1=max(res[j]*res[i-j],res[j]*(i-j)); int t2=max(res[i-j]*j,j*(i-j)); int t3=max(t1,t2); res[i]=max(res[i],t3); } } return res.back(); }};
0 0
- Integer Break解题报告
- [leetcode] 343. Integer Break 解题报告
- (java) Integer Break解题报告
- leetcode 343. Integer Break 解题报告
- LeetCode 343. Integer Break 解题报告
- LeetCode解题报告 343. Integer Break [medium]
- [Leetcode] 343. Integer Break 解题报告
- word break解题报告
- LeetCode---Integer Break解题分析
- Reverse Integer解题报告
- Reverse Integer 解题报告
- LeetCode Word Break 解题报告
- 【LeetCode】Word Break 解题报告
- [LeetCode]Word Break,解题报告
- Word Break [Leetcode解题报告]
- 1716 Integer Intervals 解题报告
- LeetCode解题报告---Reverse Integer
- LeetCode-Reverse Integer-解题报告
- okhttp下载图片
- json解析-----json数组转换成javaBean list
- mybatis源码解析(一)加载资源文件
- python 2.7 : 高级特性
- Fluentd (td-agent) 日志收集系统
- Integer Break解题报告
- Android WebView简要介绍和学习计划
- Dynamic Proxy
- Android activity的生命周期
- 访问clob类型的数据及bfilename的案例
- 怎么用Dreamweaver 8和汉化版HTML_HELP_WorkShop474制作chm教程
- Lua - 12
- 文本自动摘要简介
- ubuntu 常用命令行入门