zoukankan      html  css  js  c++  java
  • 343. Integer Break

        /*
         * 343. Integer Break 
         * 2016-7-11 by Mingyang 
         * 正整数从1开始,但是1不能拆分成两个正整数之和,所以不能当输出。
         * 那么2只能拆成1+1,所以乘积也为1。
         * 数字3可以拆分成2+1或1+1+1,显然第一种拆分方法乘积大为2。
         * 数字4拆成2+2,乘积最大,为4。
         * 数字5拆成3+2,乘积最大,为6。
         * 数字6拆成3+3,乘积最大,为9。
         * 数字7拆为3+4,乘积最大,为12。
         * 数字8拆为3+3+2,乘积最大,为18。
         * 数字9拆为3+3+3,乘积最大,为27。
         * 数字10拆为3+3+4,乘积最大,为36。
         * ....
         * 
         * 那么通过观察上面的规律,我们可以看出从5开始,数字都需要先拆出所有的3,
         * 一直拆到剩下一个数为2或者4,因为剩4就不用再拆了,
         * 拆成两个2和不拆没有意义,而且4不能拆出一个3剩一个1,这样会比拆成2+2的乘积小。
         * 那么这样我们就可以写代码了,先预处理n为2和3的情况,
         * 然后先将结果res初始化为1,然后当n大于4开始循环,我们结果自乘3,n自减3,根据之前的分析,
         * 当跳出循环时,n只能是2或者4,
         * 再乘以res返回即可:
         */
         public int integerBreak(int n) {
                if (n == 2 || n == 3) return n - 1;
                int res = 1;
                while (n > 4) {
                    res *= 3;
                    n -= 3;
                }
                return res * n;
            }
  • 相关阅读:
    双缓冲法解决重绘和闪屏问题
    VC设置视图背景颜色方法
    C++ map,set内部数据结构
    红黑树、平衡二叉树
    堆和栈的区别
    C/C++查找一定范围内的素数(筛法)
    动态内存的传递
    TCP三次握手连接
    php分享十五:php的数据库操作
    php分享十四:php接口编写
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5662321.html
Copyright © 2011-2022 走看看