力扣343 整数拆分 java实现

给定一个正整数 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

对于的正整数 n,当 n≥2 时,可以拆分成至少两个正整数的和。令 k 是拆分出的第一个正整数,则剩下的部分是 n−k,n−k 可以不继续拆分,或者继续拆分成至少两个正整数的和(一个问题可以分解为相似的子问题因此想到动态规划)。由于每个正整数对应的最大乘积取决于比它小的正整数对应的最大乘积,因此可以使用动态规划求解。

java 复制代码
    public static void main(String[] args) { // 测试用
        System.out.println(integerBreak(10));
    }

    public static int integerBreak(int n) {
        if (n == 2){
            return 1;
        }
        int[] res = new int[n + 1];
        res[0] = 0;
        res[1] = 1;
        res[2] = 2;
        for (int i = 3; i < res.length; i++) {
            for (int j = 0; j < i; j++) {
                res[i] = Math.max(res[i], Math.max((i - j) * j, res[i - j] * j));
            }
        }
        System.out.println(Arrays.toString(res)); // 输出各个数的最大值
        return res[n];
    }

以上为记录分享用,代码较差请见谅

相关推荐
赫凯1 天前
【强化学习】第五章 时序差分算法
算法
leiming61 天前
c++ find_if 算法
开发语言·c++·算法
yuanmenghao1 天前
自动驾驶中间件iceoryx - 内存与 Chunk 管理(三)
数据结构·c++·算法·链表·中间件·自动驾驶
_OP_CHEN1 天前
【算法基础篇】(四十三)数论之费马小定理深度解析:从同余性质到乘法逆元
c++·算法·蓝桥杯·数论·acm/icpc
水月wwww1 天前
【算法设计】分支限界法
算法·分支限界法
茶猫_1 天前
C++学习记录-旧题新做-链表求和
数据结构·c++·学习·算法·leetcode·链表
毕设源码-朱学姐1 天前
【开题答辩全过程】以 日程管理系统为例,包含答辩的问题和答案
java
yuniko-n1 天前
【牛客面试 TOP 101】链表篇(一)
数据结构·算法·链表·面试·职场和发展
a努力。1 天前
京东Java面试被问:双亲委派模型被破坏的场景和原理
java·开发语言·后端·python·面试·linq