LeetCode-343. 整数拆分 - 题解分析
题目来源
题目详情
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。
返回 你可以获得的最大乘积 。
示例 1:
输入: n = 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:
输入: n = 10
输出: 36
解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
提示:
2 <= n <= 58
题解分析
本题整数拆分的核心问题是如何定义状态方程的转移。状态方程的定义是比较简单的,dp[i]就表示i拆分后可以得到的最大乘积。对于dp[i]的状态转移来说,需要考虑以下两种情况:
- i可以拆分为j和i-j,i-j无需再次拆分,此时的乘积为:j * (i - j)
- i可以拆分为j和i-j,将i-j再次拆分,此时的乘积为:j * dp[i - j]
为了求得最大乘积,需要从1开始遍历上述的j,在遍历的过程中不断更新dp[i]为最大值。
结果只需要返回dp[n]即可,也就是将n进行拆分后的最优结果。
java实现
class Solution {
public int integerBreak(int n) {
// dp[i] = max(j * (i - j), j * dp[i-j])
int[] dp = new int[n + 1];
dp[0] = 0;
dp[1] = 0;// 不可再分
for (int i=2; i<=n; i++) {
dp[i] = 0;
for (int j = 1; j<i; j++) {
dp[i] = Math.max(dp[i], Math.max(j * (i - j), j * dp[i-j]));
}
}
return dp[n];
}
}
参考
LeetCode-343. 整数拆分 - 题解分析的更多相关文章
- LeetCode 343. 整数拆分(Integer Break) 25
343. 整数拆分 343. Integer Break 题目描述 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 每日一算法2019/5/2 ...
- Java实现 LeetCode 343 整数拆分(动态规划入门经典)
343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × ...
- LeetCode 343.整数拆分 - JavaScript
题目描述:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化. 返回你可以获得的最大乘积. 题目分析 题目中"n 至少可以拆分为两个正整数的和",这个条件说 ...
- leetcode 343 整数拆分
1.这个题拿到之后没有什么思路,此时就应该考虑暴力法.然而每次不知道要拆成几份,没办法用循环,所以想到用递归. 如图所示进行递归,显然有很多重复的计算,所以用自底向上的动态规划. 2.还有一个问题就是 ...
- C#版 - Leetcode 306. 累加数 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- LeetCode:整数转罗马数字【12】
LeetCode:整数转罗马数字[12] 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 10 ...
- LightOJ 1336 Sigma Function(数论 整数拆分推论)
--->题意:给一个函数的定义,F(n)代表n的所有约数之和,并且给出了整数拆分公式以及F(n)的计算方法,对于一个给出的N让我们求1 - N之间有多少个数满足F(x)为偶数的情况,输出这个数. ...
- LightOJ 1341 Aladdin and the Flying Carpet(整数拆分定理)
分析:题目并不难理解,就是一些细节上的优化需要我们注意,我在没有优化前跑了2000多MS,优化了一些细节后就是400多MS了,之前还TLE了好几次. 方法:将整数拆分为质因子以后,表达为这样的形式,e ...
- Leetcode 10. 正则表达式匹配 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- C#版(击败100.00%的提交) - Leetcode 372. 超级次方 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...
随机推荐
- 1.Django-Rest-Framework入门规范
一.WEB应用模式 1.前后端不分离 前后端混合开发(前后端不分离),返回的是html的内容,需要渲染页面,写模版 2.前后端分离 专注于后端接口,返回json.xml格式的数据 二.AP ...
- 如何使用ffmpeg缩小视频的大小?
如何使用ffmpeg缩小视频的大小? 看到这个答案.为方便起见,在下面引用: 通过将1 GB除以以秒为单位的视频长度来计算所需的比特率.因此,对于长度为16:40(1000秒)的视频,请使用10000 ...
- xlwings 模块总结
基本使用 在子线程中使用时,有时需要在子线程函数中加入以下.有时不需要加入,目前还不明白具体的原因 import pythoncom # 导入的库 pythoncom.CoInitialize() # ...
- Redis可视化管理工具-RedisDesktopManager
Windows客户端,访问Redis数据库并执行一些基本操作. 链接:https://pan.baidu.com/s/1OuGqIfbpGwglC-642rECbQ 提取码:m6uo
- LoadRunner11使用代理录制脚本
一.背景 电脑安装了LoadRunner11,在进行脚本录制时发现录制的脚本为空,即录制时事件为0,也没有自动调出对应的浏览器:如下图: 问了度娘,发现LR11要成功录制脚本,对各浏览器的版本有要求! ...
- 统一的开发平台.NET 7正式发布
在 2020 年规划的.NET 5功能终于在.NET 7 完成了,为微软和社区一起为多年来将不同的开发产品统一起来的努力加冕,未来只有一个.NET, 回顾.NET 20年,从.NET Framewo ...
- 使用gitee创建个人的图床
使用gitee创建个人的图床 1.如果还没有gitee(码云)账号,可以注册一个,注册后登陆进入个人中心 2.点击新建仓库 3.进入创建页面 创建成功 5.在本地电脑创建一个文件夹,专门用来放置要上传 ...
- Kubernetes集群YAML文件详解
Kubernetes集群YAML文件详解 概述 k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML 格式文件中,我们把这种 ...
- solidedge型材库/.sldlfp格式转.par
一.打开solidworks型材库:D:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\chinese-simplified\weldment profi ...
- i春秋phone number
点开题目是一个普普通通的登录注册界面,随便注册一个点进去有两个功能,一个是查看电话和你相同的用户,一个是登出. 点击查询就可以看到用户数 这里有访问数据库的操作应该,所以就应该用数据库注入来解题. 又 ...