Leetcode - Integer Break

My code:

public class Solution {
    public int integerBreak(int n) {
        if (n <= 0) {
            return 0;
        }
        
        int[] dp = new int[n + 1];
        dp[1] = 1;
        for (int i = 2; i <= n; i++) {
            int begin = 1;
            int end = i - 1;
            int max = 0;
            while (begin <= end) {
                int n1 = dp[begin] * end;
                int n2 = dp[begin] * dp[end];
                int n3 = begin * end;
                int n4 = begin * dp[end];
                max = Math.max(max, Math.max(n1, Math.max(n2, Math.max(n3, n4))));
                begin++;
                end--;
            }

            dp[i] = max;
        }
        
        return dp[n];
    }
}

我的思想和 perfect square 这道题目很类似。
如果是 8
那么
1, 7
2, 6
3, 5
4, 4
可以组成他。
然后1,2,3,4,5,6,7
又可以再细分,
或者不分。
所以对于每个组合,可以有四种结果,拿出最大的就行。
比如,
3, 5
可以是
3 * 5
(1 * 2) * 5
3 * (2 * 3)
(1 * 2) * (2 * 3)

最大值是18
所以 dp[8] = 18

time complexity : O(n ^ 2)

然后答案说有一种O(n) 的解法:
https://discuss.leetcode.com/topic/55120/my-simple-dp-solution-o-n

看了下,就是找规律。没什么意思。。。
然后据说还有 O(log n) 的解法,也是玩数学游戏。不是很有意思。就不研究了.

Anyway, Good luck, Richardo! -- 08/27/2016

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,774评论 0 33
  • Given a positive integer n, break it into the sum of at l...
    无聊的刷题阅读 406评论 0 0
  • 胡适先生曾略带自嘲地表示过:“偶有几茎白发,心情微近中年;做了过河卒子,只能拼命向前”。虽然胡先生也表示了对所谓“...
    泠泠柒阅读 723评论 6 3
  • 没开车,搭乘了同事的小电驴,穿行在城市的街口巷道,忽然发现,天好蓝,云很白,风轻扬,感觉秋风穿过发丝的柔意,...
    静静的开水阅读 102评论 0 0
  • 哈哈又是完美收官,今天中关村总业绩1350300 我今天早上是路上是各种不顺,出门带错公交卡,身无分文,手机也没有...
    雨过天晴1阅读 297评论 0 1