首页 > 其他分享 >343 整数拆分

343 整数拆分

时间:2022-10-26 23:12:38浏览次数:72  
标签:遍历 乘积 整数 拆分 343 时为 dp

题目 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。

思路

注意:有障碍物的位置设置dp为0值即可,可以自己画图理解理解。

  • 动规数组dp[i]及其的下标含义
    dp[i]:第i个数拆分后最大乘积值为dp[i]

  • 递推公式
    1、一个整数至少分成两个数,假设分成j和i-j
    2、得到递推公式:dp[i] = max(dp[i], dp[j]*dp(i - j));

  • 初始化
    当n=2时为1,n=3时为2

    还有一种在处理递推公式的情况,当n=2时为2,n=3时为3,就是当n=2或者3时不再切分,因为切分只会让数值乘积更小。当然这个推出来的结果,当n>=4时,其切分后最大乘积值肯定大于原值,找不到比原值小的特例。
    参考:https://www.bilibili.com/video/BV1Nt4y1D7gh/?spm_id_from=333.337.search-card.all.click&vd_source=d6067928eb906629adf6cc260761df74

  • 遍历顺序
    遍历行从前往后

  • 举例验证
    自己画图试试就行了

代码

class Solution:
    def integerBreak(self, n: int) -> int:
        if n==2: return 1
        if n==3: return 2
        # 记得是乘n+1,因为第n个数,其下标就是n
        dp = [0]*(n+1)
        dp[1] = 1
        dp[2] = 2
        dp[3] = 3
        for i in range(4, n+1):
            for j in range(1, n//2+1):  # 从切1个开始遍历,遍历到中间即可,以防奇数,可以加1
                dp[i] = max(dp[i], dp[j]*dp[i-j])
        return dp[n] 

标签:遍历,乘积,整数,拆分,343,时为,dp
From: https://www.cnblogs.com/edkong/p/16830511.html

相关文章

  • 整数缓存池
    intnum1=100;//基本类型的定义Integernum2=100;Integernum3=Integer.valueOf(100);//同一个对象,都在数组里面Integernum4=newInteger(100);Integernum5=newInt......
  • 字符串转换整数 (atoi)
    请你来实现一个 myAtoi(strings) 函数,使其能将字符串转换成一个32位有符号整数(类似C/C++中的atoi函数)。函数 myAtoi(strings)的算法如下:读入字符串并丢弃无......
  • P2343 宝石管理系统
    #include<iostream>usingnamespacestd;#defineN100000+10000+1namespaceSplay{structnode{intson[2],siz,cnt,fa,k;......
  • 力扣561(java&python)-数组拆分(简单)
    题目:给定长度为 2n 的整数数组nums,你的任务是将这些数分成 n对,例如(a1,b1),(a2,b2),...,(an,bn),使得从1到 n的min(ai,bi)总和最大。返回该最大......
  • 我怎么把拆分好的pdf保存在我创建的新文件夹里?
    大家好,我是皮皮。一、前言前几天在Python白银交流群【FN】问了一个Python自动化办公的问题,提问截图如下:前面的已经分割好了,就差最后的存储。二、实现过程这里【皮皮......
  • 【Java[方法调用]】7-2 整数排序(降序)
    输入5个整数,对所有整数进行排序,按照降序输出。输入格式:输入5个整数。输出格式:按照降序输出5个整数。输入样例1:13526输出样例1:65321输入样例2:182......
  • 1655. 分配重复整数
    题目描述给了一个数组nums,数组中最多有50个不同的值再给了m个顾客的订单数组,数组元素ei的含义是第i个顾客需要有ei个相同的整数问给的nums能不能满足以上所有顾客的要求......
  • (算法课)大整数相乘 |向量卷积|多项式相乘| 快速傅里叶变换FFT
    D(1021):很大的ABTimeLimit:1SecMemoryLimit:256MbSubmitted:6Solved:0Description如题,计算AB的值并输出。Input两行,分别代表A和B。A和B......
  • 343. Integer Break
    把一个整数拆分成至少两个正整数的和,要求拆分后的整数的乘积最大。Example1:Input:2Output:1Explanation:2=1+1,1×1=1.Example2:Input:10Output:36Explana......
  • 剑指Offer-14-剪绳子/力扣-343-整数拆分
    对于一段绳子,第一刀下去可以将绳子分成i和n-i两段,其中i的取值范围为[1,n-1]dp[n]表示n可分成的最大乘积和,dp[n]=max(dp[n],max(i*n-i,i*f(n-i)))初始化:全部初始化为1i......