zoukankan      html  css  js  c++  java
  • Leetcode---剑指Offer题14---剪绳子

    目录

    剑指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;
            }                
      
    

      

  • 相关阅读:
    2019.1.3 WLAN 802.11 a/b/g PHY Specification and EDVT Measurement II
    L215 Visual impairment
    2019.1.3 WLAN 802.11 a/b/g PHY Specification and EDVT Measurement I
    L213
    firewall端口放行
    数据库迁移之mysql-redis.txt
    sort
    linux注释多行
    解决Nginx+Tomcat下客户端https请求跳转成http的问题
    监控zookeeper
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/12886540.html
Copyright © 2011-2022 走看看