算法面试题:1 到 1000 之间有多少个 7?

这篇博客介绍了两种解决面试题的方法:计算1到1000之间含有数字7的个数。第一种思路通过合理分类和隔离法得到答案300。第二种思路则是计算所有数字字符总数并去除0的个数,再除以9,同样得到300。总结强调了解决问题的表示方法和分类的重要性。

 

这两天看到一个很有意思的面试题:考官直接问,1 到 1000 到多少个 7?

要求,不编程,直接给出答案,并简单给出思路。

C/C++的学习裙【七一二 二八四 七零五 】,无论你是小白还是进阶者,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

 

第一种思路

首先应该有个合理的归类,我一开始就想到了一个合理的分类法,即1到1000,每个数都看作3 位数,而1000明显没有7,不考虑那1看成001,19看成019,以此类推 这样每个数字可以用三个格子表示,就有了一个统一的表示方法:

口口口

第一步,只考虑后面两个格子。我最初只想第一种情况,X7,即07,17,一直到97,其中先不考虑77的特殊性(隔离的思想),这样从0~9有10个7,再考虑77,就有11个7。还有一种情况,7X,即70,71,一直到79,情况同上,也有11个7。

这两种情况都算上了77里面的两个7,因此减去2。结果是22-2=20。

第二步,考虑第一个格子。第一个格子,从0~9,即有10种上述情况,其中7比较特殊,我们先不把它当作7(隔离的思想),那么情况简单了,一共有10*20 = 200个7。

第三步,考虑刚才被隔离掉的7。这一步容易想歪,觉得是不是+20呢?其实应该仔细想下,701, 719, 722这些都多了1个7,那777呢?仔细想下,777里面的后面2个7也是前面已经算过了。那就很明朗了。就是刚才的隔离,仅仅忽略了从00~99这100个数中前面含一个7的情况。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值