343. 整数拆分

343. 整数拆分

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • _343整数拆分_拆分法
    • _343整数拆分
  • 错误经验吸取

原题链接:

343. 整数拆分

https://leetcode.cn/problems/integer-break/description/

完成情况:

343. 整数拆分_第1张图片

解题思路:

    /**
     解题思路:
     如何使面积最大呢?  -> 毫无疑问,肯定是正方形
     那么每次我就尝试以均等切分,保存当前的合,
     然后迭代求和最大值和最小值,产生一个新的均值

     举例:
     10
     5*5  ->25
     5*3*2 ->30
     【5和2合并再均分】
     4*3*3  ->36
     【4和3合并再均分】,与前面【5和2合并再均分】产生的合相同,故结束。
     Max算计算过得哪个值最大。
     */

参考代码:

_343整数拆分_拆分法

package 代码随想录.动态规划;

public class _343整数拆分_拆分法 {
    public int integerBreak(int n) {
        //2 <= n <= 58
        //只要前一个结果,跟后一个结果有关系的题目 ,基本上都可以使用到dp
        int dp_splitMaxArea [] = new int[n+1];
        //2 <= n <= 58
        /**
         解题思路:
         如何使面积最大呢?  -> 毫无疑问,肯定是正方形
         那么每次我就尝试以均等切分,保存当前的合,
         然后迭代求和最大值和最小值,产生一个新的均值

         举例:
         10
         5*5  ->25
         5*3*2 ->30
         【5和2合并再均分】
         4*3*3  ->36
         【4和3合并再均分】,与前面【5和2合并再均分】产生的合相同,故结束。
         Max算计算过得哪个值最大。
         */
        for (int i=2;i<=n;i++){
            int curMax = 0;
            for (int j=1;j<i;j++){
                curMax = Math.max(curMax,Math.max(j*(i-j),j * dp_splitMaxArea[i-j]));
            }
            dp_splitMaxArea[i] = curMax;
        }
        return dp_splitMaxArea[n];
    }
}

_343整数拆分

package 代码随想录.动态规划;

public class _343整数拆分 {
    /**
     *
     * @param n
     * @return
     */
    public int integerBreak(int n) {
        //dp[i] 为正整数 i 拆分后的结果的最大乘积
        int[] dp = new int[n+1];
        dp[2] = 1;
        for(int i = 3; i <= n; i++) {
            for(int j = 1; j <= i-j; j++) {
                // 这里的 j 其实最大值为 i-j,再大只不过是重复而已,
                //并且,在本题中,我们分析 dp[0], dp[1]都是无意义的,
                //j 最大到 i-j,就不会用到 dp[0]与dp[1]
                dp[i] = Math.max(dp[i], Math.max(j*(i-j), j*dp[i-j]));
                // j * (i - j) 是单纯的把整数 i 拆分为两个数 也就是 i,i-j ,再相乘
                //而j * dp[i - j]是将 i 拆分成两个以及两个以上的个数,再相乘。
            }
        }
        return dp[n];
    }
}

错误经验吸取

你可能感兴趣的:(java学习,算法知识,#,LeetCode题解,java,排序算法,链表,算法,数据挖掘)