这是我参与更文挑战的第 17 天,活动详情查看 更文挑战
这个系列有点花头^o^,就是来拓展拓展思维,算是智力题吧,一般不会在面试中出现,但有的厂会出一些,据我所知我们这有的部门会问些这种,然后在群里说: “唉,又是全军覆没,-_-“,我好奇地看了看群,把这个问题拿出来,虽然可以解出来,但是确实在有精神和时间压力的情况下应该是无法轻松做出。突然想起这件事,所以开了个栏目,希望能在面试中为你锦上添花。
首先,先端正下态度,1. 这种题做不出也没关系。这就是你该有的态度,2. 做不出答案,整理出思路也是好的,其实可能面试官就是看你面对难题和面对压力的反应,而不是题目本身,轻松面对,就当自己做不出来吧,也没啥大不了的。
我高中曾经在33IQ上一波通过了门萨测试,对自己还是较有信心,但随着时间的推移,愈发觉得耐心和毅力才是增长智慧的唯一法门,所以努力吧 ^-^
另外,天天看算法系列是不是有点无聊,调剂一下?
2. 问 1 ~ 999 之间有多少个 7
题目描述
1 到 999 之间有多少个 7 ?
分析
拿到问题,不要急,先搞清楚问题是什么,比如以下几个问题一定要问清,并自己举例
- 不是问有多少含
7
的数字,而是包含多少个 7
- 如
777
是包含3 个 7
,就算3个
,而不是 777 算 1个
我们还是从小规模的问题想起,这样能够方便我们尝试
1 - 9
含 1
个 7
1 - 99
含 几个?
我们可以看成是两个位数上的尝试
- 先定住后面一位
()7
,07,17,27,37,47,57,67,77,87,97
一共是11个
(注意 77 是含 2个 7), - 然后定住前面
7()
,70,71,72,73,74,75,76,77,78,79
一共是11个
- 但是
77
这个数我们算了2次,去掉2个,得到11 + 11 - 2 = 20个
这是算我们硬数出来的,那么能不能有更巧妙的方式呢?
那么我们可以分析下,其实每个位都是 0 ~ 9
的交替,一共是 10个数
,当我们定下一个位置
,那么另外剩余的1个位置可能性就是 10
,这个 10
可以理解为 (每一位变化量 10) * (剩下变化位 1) = 10 种
,就好比上面的 定了个位 ()7
,十位有0 - 9
共 10个变化,定了十位 7()
,个位也有 10种变化,其实是互不影响的。
那么 2位 的含 7 总数 = (每一位变化量 10) x (7被定在哪有 2 个位置可选) = 20
接下来分析 1 - 999
,是三个变化量
那么 我们还是先定一位 ()()7,()7(),7()()
我们看到 7 被定在哪个位置,有 3
种选择,然后另外两个空格的变化量为 10 * 10 = 100
因为每个都是可以从 0 - 9
,所以最后就是
那么 3位 (1 - 999) 的含 7 总数 = (定下7之后另两位的变化量 10*10=100) x (7被定在哪 有 3 个位置可选) = 300
这样,用数学归纳法你也可以得到更大数的含数字的方法。
比如 1 - 10000
,很轻松你就能算出
其实就是 1 - 9999
, 有 4
个位置可定为 7
,另外3个位置变化量就是 10 * 10 * 10 = 1000
,总数 4000
怎么样 这样分析下来,是不是很简单呢
另外向大家着重推荐下另一个系列的文章,非常深入浅出,对前端进阶的同学非常有作用,墙裂推荐!!!核心概念和算法拆解系列 记得点赞哈
今天就到这儿,想跟我一起刷题的小伙伴可以加我微信哦 点击此处交个朋友
Or 搜索我的微信号infinity_9368
,可以聊天说地
加我暗号 “天王盖地虎” 下一句的英文
,验证消息请发给我
presious tower shock the rever monster
,我看到就通过,加了之后我会尽我所能帮你,但是注意提问方式,建议先看这篇文章:提问的智慧