zhedahht / CodingInterviewChinese2

《剑指Offer:名企面试官精讲典型编程面试题》第二版源代码
Other
5.32k stars 2.17k forks source link

p96-剪绳子-动态规划-products赋值有误 #5

Closed luzijing closed 4 years ago

luzijing commented 7 years ago
if(length < 2)  return 0;
if(length == 2) return 1;
if(length == 3)  return 2;

。。。。。。。。。。。。。 products[1] = 1; products[2] = 2; products[3] = 3; 你上面写的跟下面写的矛盾呀。。。。。

L5411 commented 7 years ago
if(length < 2)  return 0;
if(length == 2) return 1;
if(length == 3)  return 2;

这里是长度的返回值

products[1] = 1;
products[2] = 2;
products[3] = 3;

这些值是用来计算后续答案的,正确的值在开始时已经返回,后续计算需要用到 products[2]、products[3],比如 f(5) = f(2) f(3) = 2 3,是不能等于 1 * 2 的

silencemao commented 6 years ago

没有错误,当length<=3的时候,我们直接返回了结果。如果整个绳子的长度为3,我们必须把绳子剪开,因为题目要求m>1,其中一段为2,另一段为1,这样结果就是2。      当length>=4的时候,我们可以把绳子剪成两段,其中一段为3另一段为1,这样长度为3的那一段的最大值就是3而不是2,因为这一段我们不需要再剪了。当然长度为4的最大值是2和2的组合,我们已经存储了2的长度。

kyolxs commented 6 years ago

没有错误,当length<=3的时候,我们直接返回了结果。如果整个绳子的长度为3,我们必须把绳子剪开,因为题目要求m>1,其中一段为2,另一段为1,这样结果就是2。      当length>=4的时候,我们可以把绳子剪成两段,其中一段为3另一段为1,这样长度为3的那一段的最大值就是3而不是2,因为这一段我们不需要再剪了。当然长度为4的最大值是2和2的组合,我们已经存储了2的长度。

谢谢大佬

zhedahht commented 4 years ago

谢谢silencemao的解释。