题解 | #剪绳子#

剪绳子

http://www.nowcoder.com/practice/57d85990ba5b440ab888fc72b0751bf8

这题比较偏数学思维了。观察几个数手动切割的结果可以发现,它们最大的乘积都是拆分成若干个2和3相乘得到的,不存在1,5,7。
根据这一结论可以将长度为n的数分为两部分,一部分由若干个3相乘得到,另一部分由若干个2相乘得到,且3必定多于2。
所以实际操作时,可以先找出3部分的乘积,在得出2部分的乘积。最后将两部分相乘即得结果。

具体实现为当n小于4时直接返回4 - 1,因2,3两种情况只能拆分成{1,1}和{1,2}。
然后计算计算n%3的值,当该值等于0时,说明n刚好被3整除,能拆分成n/3个3,此时最大乘积为3^(n/3)。当n%3等于1时,说明该数除3会余1,而我们不希望乘积中有1出现,这样相当于把这个1浪费了,所以我们将这个1与一个3组合成4,这样就得到了两个2,此时最大乘积为(3^((n-4)/3))*4。当n%3等于2时,此时最大成积为(3^(n/3))*2。不存在其他情况。

class Solution {
public:
    int cutRope(int number) {
        if(number < 4){
            return number - 1;
        }
        else{
            if(number % 3 == 0){
                 return pow(3, number / 3);
            }
            else if(number % 3 == 1){
                int more = number - 4;
                return 4 * pow(3, more / 3);
            }
            else{
                return pow(3, number / 3) * (number % 3);
            }
        }
    }
};
全部评论

相关推荐

屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务