python每日一题 砍竹子 中等难度
我偷了一个懒 我觉得这样没啥 就把前面这几个比较特殊的列出来就行 然后测试显示是超过百分之百的速度 我觉得可以滴。然后代码就是这样的 但是没通过测试长度为3的输出是2 看来一定是要砍一节了我真服了。return 2#4和4之前都是本身就是最大的了。
·
现需要将一根长为正整数 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]
动态规划解法 大家这个自己看看吧 我懒得看了
如果喜欢这个帖子 欢迎点赞
更多推荐


所有评论(0)