现需要将一根长为正整数 bamboo_len 的竹子砍为若干段,每段长度均为正整数。请返回每段竹子长度的最大乘积是多少

我试验了好几个 找出来了一个规律 我不知道这个是不是符合出题的要求 我怎么感觉是要分尽可能多的3 但是如果分出来1就不好了 如果整除3 那很好 如果不是剩余1 那么就合并一个3 如果是剩一个2 那也很好 我先试试这个思路来谢谢代码 我先这样写出来

class Solution(object):
    def cuttingBamboo(self, bamboo_len):
        if bamboo_len<=4:
            return bamboo_len#4和4之前都是本身就是最大的了
        m=bamboo_len//3
        n=bamboo_len%3
        if n==0:
            return 3**m
        if n==2:
            return (3**m)*2
        return (3**(m-1))*4

solution=Solution()
result=solution.cuttingBamboo(14)
print(result)

然后代码就是这样的 但是没通过测试  长度为3的输出是2 看来一定是要砍一节了我真服了 

class Solution(object):
    def cuttingBamboo(self, bamboo_len):
        if bamboo_len==2:
            return 1#4和4之前都是本身就是最大的了
        if bamboo_len==3:
            return 2#4和4之前都是本身就是最大的了
        if bamboo_len==4:
            return 4
        m=bamboo_len//3
        n=bamboo_len%3
        if n==0:
            return 3**m
        if n==2:
            return (3**m)*2
        return (3**(m-1))*4

solution=Solution()
result=solution.cuttingBamboo(14)
print(result)

我偷了一个懒 我觉得这样没啥 就把前面这几个比较特殊的列出来就行 然后测试显示是超过百分之百的速度 我觉得可以滴

如果你觉得这个帖子有帮助到你 欢迎点赞!

然后我们看看其他大佬的写法 

class Solution(object):
    def cuttingBamboo(self, bamboo_len):
        dp = [0] * (bamboo_len + 1)
        for i in range(2, bamboo_len + 1):
            for j in range(i):
                dp[i] = max(dp[i], j * (i - j), j * dp[i - j])
        return dp[bamboo_len]

动态规划解法 大家这个自己看看吧 我懒得看了 

如果喜欢这个帖子 欢迎点赞

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐