当前位置:网站首页>七夕力扣刷不停,343. 整数拆分(剑指 Offer 14- I. 剪绳子、剑指 Offer 14- II. 剪绳子 II)
七夕力扣刷不停,343. 整数拆分(剑指 Offer 14- I. 剪绳子、剑指 Offer 14- II. 剪绳子 II)
2022-08-09 12:46:00 【byte字节8位-128~127】
https://leetcode-cn.com/problems/integer-break/
https://leetcode-cn.com/problems/jian-sheng-zi-lcof/



根据以上思路得动态规划状态转移方程dp表达式
dp[n] = max(dp[n],dp[j]*dp[n-j]);
这里解释一下,就是可以选择直接是dp[n],或者将dp[n]划分为两个数,看这两个数的乘积和不划分的dp[n],这两个哪个比较大。
有时候划分了可能会变小,比如dp[2],dp[3]
dp6中可能包括多个dp[2]或者3,所以,这个时候就要考虑,是否要继续划分的问题。
dp[n]:长度为n的数获得的乘积的最大值
class Solution {
public int integerBreak(int n) {
//动态规划
//base case
int[] dp = new int[n+1];
if(n<2){
return 1;
}
if(n==2){
return 1;
}
if(n==3){
return 2;
}
//这里要说明一下,因为对于2、3,再拆分就会越来越小,
//所以就不拆分了,只要答案对就行,也不能太纠结
dp[1]=1;
dp[2]=2;
dp[3]=3;
//双层for循环,动态规划经典标志
for(int i=4;i<=n;i++){
for(int j=1;j<=(i/2);j++){
dp[i] = Math.max(dp[i],dp[j]*dp[i-j]);
}
}
return dp[n];
}
}
class Solution {
public int integerBreak(int n) {
if(n<=2){
return 1;
}
if(n==3){
return 2;
}
int[] dp = new int[n+1];
//基础的就不分了,因为会越分越小
dp[1]=1;dp[2]=2;dp[3]=3;
// dp[1]=1;
// dp[2]=2;
// dp[3]=3;
for(int i=4;i<=n;i++){
for(int j=1;j<=(i/2);j++){
dp[i] = Math.max(dp[i],dp[j]*dp[i-j]);
}
}
return dp[n];
}
}
代码一样,只是出现了一个bug,调试一下,就好了
class Solution {
public int cuttingRope(int n) {
int[] dp = new int[n+1];
if(n<=2){
return 1;
}
if(n==3){
return 2;
}
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
//双层for循环,经典动态规划标志
for(int i=4;i<=n;i++){
//这里的j忘记写=了
for(int j=1;j<=(i/2);j++){
System.out.println(dp[i]);
System.out.println(dp[j]*dp[i-j]);
dp[i] = Math.max(dp[i],dp[j]*dp[i-j]);
System.out.println(dp[i]);
}
}
return dp[n];
}
}
剑指 Offer 14- II. 剪绳子 II
https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/solution/wu-xu-fu-za-shu-xue-jiang-jie-dong-tai-g-j470/
class Solution {
public:
int cuttingRope(int n) {
if (n < 4) {
return n - 1;
}
vector<int> products(n + 1, 0);
products[1] = 1;
products[2] = 2;
products[3] = 3;
int maxVal = 0;
for (int i = 4; i <= n; ++i) {
maxVal = 0;
for (int j = 1; j <= i / 2; ++j) {
maxVal = max(maxVal, products[j] * products[i - j]);
}
products[i] = maxVal;
}
return products[n];
}
};
class Solution {
public int cuttingRope(int n) {
/** 思路:动态规划 费曼学习法一遍 动态规划是一种穷举,然后可以避免我们重复计算 我们先自上而下考虑: 比如,对于一个绳子n,我们可以先切一刀 然后,获取两段,那么我们可以有n-1种切法,因为n要求是整数 然后可以对其中一段,再进行切 获取若干段,不断重复这个过程 最后直到分为不可以再分的段数,然后我们 再自下而上的考虑: 然后根据求出的每段的最大值,来考虑该段是否需要进行划分 由于有一些边界条件限制,所以我们应该先初始化 */
if(n<2){
return 1;
}
if(n==2){
return 1;
}
if(n==3){
return 2;
}
int[] dp = new int[n+1];
//由公式可以证明,当n小于4的时候,不分开获取的结果会更大一些
//我们的dp数组,就是按照不分开进行计算的
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
//穷举每一种可能
for(int i=4;i<=n;i++){
//每一种可能是否需要划分
for(int j=1;j<=(i/2);j++){
//是否划分,划分后大还是不划分大,整一个for循环,来寻找dp[i]的最大值
dp[i] = Math.max(dp[i],dp[j]*dp[i-j]);
}
}
return dp[n];
}
}
边栏推荐
- Rmarkdown教程
- Do you know the difference between comments, keywords, and identifiers?
- 用场景定义硬件,英码科技破解“边缘计算”密码
- 5G China unicom 直放站 网管协议 实时性要求
- WSA toolkit installed app store tip doesn't work how to solve?
- Rust from entry to proficient 04 - data types
- jenkins api创建自定义pipeline
- ERP不规范,同事两行泪 (转载非原创)
- 关于Retrofit网络请求URL中含有可变参数的处理
- 批量读取word docx文件指定表格内容,保存在excel文件中
猜你喜欢

Flutter Getting Started and Advanced Tour (8) Button Widget

工作任务统计

史上最猛“员工”,疯狂吐槽亿万富翁老板小扎:那么有钱,还总穿着同样的衣服!...

AI basketball referee, walking is special, ask harden care don't care

FPGA-近日工作总结

How to save Simulink simulation model as image or PDF

Flutter入门进阶之旅(五)Image Widget

Clock frequency and baud rate count for serial communication in FPGA

Fragment中嵌套ViewPager数据空白页异常问题分析

jenkins api create custom pipeline
随机推荐
流量焦虑背后是企业对客户关系管理的不足
GIN Bind模式获取参数和表单验证
ftplib+ tqdm 上传下载进度条
Go Affair, How to Become a Gopher and Find a Go Job in 7 Days, Part 1
R语言kaggle 游戏数据探索与可视化
CPU-MIPS32指令架构(无内锁流水线微处理器)
Rust from entry to proficient 04 - data types
绘制混合密度函数图以及添加分位数线
5G 联通网管设计思路
Dry+Bean+Dataset R语言数据分析,报告英文
Unicom network management protocol block diagram
jenkins api创建自定义pipeline
造自己的芯,让谷歌买单!谷歌再度开源 180nm 工艺的芯片
ViewPager fragments of nested data blank page abnormal problem analysis
read stream special attention
30行代码实现微信朋友圈自动点赞
Introduction to Flutter advanced trip Dialog&Toast (10)
Do you know the difference between comments, keywords, and identifiers?
LnReader编译
NFS 特别注意权限的问题