码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode---剑指Offer题14---剪绳子

时间:2020-05-14 11:08:08      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:quick   model   ems   整数   off   mode   比较   初始   sha   

目录

 

剑指Offer-面试题14---剪绳子

剪绳子1

https://leetcode-cn.com/problems/jian-sheng-zi-lcof/

给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。2 <= n <= 58

 

这道题主要考察数学找规律的能力。数字>5时,尽量找出多的数字3。

 

        public int CuttingRope(int n)
        {
            if (n == 2)
                return 1;
            if (n == 3)
                return 2;

            int result = 1;
            while (n>4)
            {
                n -= 3;
                result *= 3;
            }

            result *= n;

            return result;
        }

  

剪绳子2

https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/

给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] 。请问 k[0]*k[1]*...*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 2 <= n <= 1000

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

 

 这题要考虑大数,既然我们主要计算3的个数,当数字比较大时,相当于有很多的3相乘,这时候用快速幂就很效率了。

 

        private const int MODEL = 1000000007;  
      
        public int CuttingRope(int n)
        {
            if (n == 2)
                return 1;
            if (n == 3)
                return 2;

            long result = 1;
            //需要切割的3的个数
            long num3 = 0;

            while (n>4)
            {
                n -= 3;
                num3++;
            }

            result = QuickCal(3, num3);
            result = (result*n)% MODEL;

            return (int)result;
        }

        private long QuickCal(long a, long b)
        {
            long result = 1;
            a = a % MODEL;

            while (b > 0)
            {
                if (b%2==1)
                {
                    b--;
                    result = (result * a) % MODEL;
                }
                b /= 2;
                a = (a * a) % MODEL;
            }

            return result;
        }                
  

  

Leetcode---剑指Offer题14---剪绳子

标签:quick   model   ems   整数   off   mode   比较   初始   sha   

原文地址:https://www.cnblogs.com/Fflyqaq/p/12886540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!