zhedahht / CodingInterviewChinese2

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

面试题43:分析过程错误 #37

Open auniquesun opened 5 years ago

auniquesun commented 5 years ago

作者在面试题43有这样的分析,存在错误——“可以再把1346-21345分成两段:[1346, 11345]和[11346, 21345].每一段剩下的4位数字中,选择其中一位是1,其余三位可以在0~9这10个数字任意选择,因此根据排列组合原则,总共出现的次数是2x4x10^3 = 8000次”

按作者说的,剩下的4位数字中,如果前3位选0,最后一位选1,数字1应当包含在8000次里面,但是数字1并不在 [1346, 11345]和[11346, 21345] 任一区间内,很明显上述分析并不对

yunhuang94 commented 5 years ago

首先下结论:结果是没有问题的。 从区间[1346,11345]来看,对于最高位,他不是在0-9中取值,而是在1-10里面取值,楼主说的十百千位都取0的0001其实应该是10001,在其在区间内。同理[11346,21345]也是,对应的十百千位都取0时对应的值应该是20001,同样在区间里面哟。

hadisi1993 commented 3 years ago

是对的,在[1346,11345]这个区间内,它的后四位每一位都能取任0~9之间的数,所以书上说的是成立的。