前端必刷思维题系列[2]

这是我参与更文挑战的第 17 天,活动详情查看 更文挑战

这个系列有点花头^o^,就是来拓展拓展思维,算是智力题吧,一般不会在面试中出现,但有的厂会出一些,据我所知我们这有的部门会问些这种,然后在群里说: “唉,又是全军覆没,-_-“,我好奇地看了看群,把这个问题拿出来,虽然可以解出来,但是确实在有精神和时间压力的情况下应该是无法轻松做出。突然想起这件事,所以开了个栏目,希望能在面试中为你锦上添花。

首先,先端正下态度,1. 这种题做不出也没关系。这就是你该有的态度,2. 做不出答案,整理出思路也是好的,其实可能面试官就是看你面对难题和面对压力的反应,而不是题目本身,轻松面对,就当自己做不出来吧,也没啥大不了的。

我高中曾经在33IQ上一波通过了门萨测试,对自己还是较有信心,但随着时间的推移,愈发觉得耐心和毅力才是增长智慧的唯一法门,所以努力吧 ^-^

另外,天天看算法系列是不是有点无聊,调剂一下?

2. 问 1 ~ 999 之间有多少个 7

题目描述

1 到 999 之间有多少个 7 ?

分析

拿到问题,不要急,先搞清楚问题是什么,比如以下几个问题一定要问清,并自己举例

  • 不是问有多少含 7数字,而是包含多少个 7
  • 777 是包含 3 个 7,就算 3个,而不是 777 算 1个

我们还是从小规模的问题想起,这样能够方便我们尝试

1 - 91 个 7
1 - 99 含 几个?

我们可以看成是两个位数上的尝试

  • 先定住后面一位 ()707,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,我看到就通过,加了之后我会尽我所能帮你,但是注意提问方式,建议先看这篇文章:提问的智慧

参考

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享