leetcode 343. 整数拆分

2023.8.10

本题用dp算法来做,dp[i]代表的含义是:当前数字i 在拆分之后所能获得的最大乘积 。然后由于n>=2,所以dp[0]和dp[1]没有意义,不用初始化,直接初始化dp[2]= 1。 然后再遍历给dp数组赋值:dp[i]的来源有两个:①将i拆成 j 和 (i - j) ,然后相乘,即j*(i-j) 。 ② 将i 拆成 j 和(i-j), 然后(i-j)的最大拆分乘积为dp[i-j],即j * dp[i-j]

思考画的草图:

代码如下:

cpp 复制代码
class Solution {
public:
    int integerBreak(int n) {
        vector<int> dp(n+1); //dp[i]的含义是:当前数字i拆分之后的最大乘积值。
        dp[2] = 1; //初始化
        //遍历赋值
        for(int i=3; i<=n; i++)
        {
            for(int j=1; j<=i/2; j++)
            {
                dp[i] = max(dp[i] , max(j*(i-j),j*dp[i-j]));
            }
        }
        return dp[n];
    }
};
相关推荐
汀、人工智能1 小时前
[特殊字符] 第40课:二叉树最大深度
数据结构·算法·数据库架构·图论·bfs·二叉树最大深度
沉鱼.441 小时前
第十二届题目
java·前端·算法
Accerlator2 小时前
2026 年 4 月 1 日电话面试
面试·职场和发展
赫瑞2 小时前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
大熊背2 小时前
ISP Pipeline中Lv实现方式探究之三--lv计算定点实现
数据结构·算法·自动曝光·lv·isppipeline
初夏睡觉3 小时前
c++1.3(变量与常量,简单数学运算详解),草稿公放
开发语言·c++
西岸行者3 小时前
BF信号是如何多路合一的
算法
阿拉斯攀登3 小时前
从入门到实战:CMake 与 Android JNI/NDK 开发全解析
android·linux·c++·yolo·cmake
大熊背3 小时前
ISP Pipeline中Lv实现方式探究之一
算法·自动白平衡·自动曝光
罗西的思考4 小时前
【OpenClaw】通过 Nanobot 源码学习架构---(5)Context
人工智能·算法·机器学习