leetcode----343.整数拆分

106 阅读1分钟

leetcode----343.整数拆分

题目:将n拆分为2个或2个以上的数,使乘积最大

思路:n可以拆成2个,3个,4个,等等,此时就可以考虑使用动态规划

  1. dp[i] 表示i拆分为多个数可得的最大乘积

  2. 拆成2个: dp[i] = j*(i-j)

    拆成3个: dp[i] = j*dp[i-j] 注意dp[i]的定义:此时的dp[i-j]可以表示为2个数的乘积

    拆成4个: dp[i] = j*dp[i-j] 此时dp[i-j]表示3个数的乘积

    ....

    拆成若干个 dp[i] = j*dp[i-j]

dp[i] = Math.max(j*(i-j), j*dp[i-j])

  1. 初始化: dp[2] = 1

  2. 遍历顺序 左-->右

int i = 3; i <= n; i++ {
    int j = 1; j <= i-j; j++ {  //此处j<=i-j j从1到i-j
        dp[i] = Math.max(dp[i], Math.max(j*(i-j), j*dp[i-j])); 
    }
}