公众号关注 “阿拉奇学Java

设为 “星标”,带你学习更多知识!

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

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

第一种思路

首先应该有个合理的归类,我一开始就想到了一个合理的分类法,即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的情况。

所以,最后的答案是200+100 = 300。

假定前面的结果用f(3)表示。

不难归纳,1到10000,即f(4) = 10*f(3) + 1000即4000

另外一种思路

题目问有多少个7,如果问有多少1,或者2,或者9呢?不难猜想1~9情况是一样的。先忽略掉1000里面多的一个1。

有没有可能求出有多少个0,然后再求出1~1000这些数字的字符总数,再减去0的个数后,再除以9呢?

第一步:求1~1000这些数字的字符总数

1位数,9个

2位数,90个2 = 180个(1~99有99个,减去9)

3位数,900个3 = 2700个(类似上面10~99,这里是100~999)

4位数,1*4 = 4

总数是2700+180+9+4 = 2893个字符

第二步:求有多少个0

1位数,没有

2位数,只考虑X0的情况,从10~99,有9个

3位数,要考虑0X和X0两种情况,各11个,减去重复的2个,即211-2 = 20, 从100~999有9种情况,即920 = 180个

4位数,3个0

那结果是2700+180+9+4 – 180+9-3 = 2701个 这样减去1000里面多的那个1,刚好是2700个了。

那结果好办了,不考虑这个1,1~9都是出现2700/9 = 300次。

这个解法是间接求,比直接求更麻烦了些。

总结

表示方法和分类很重要,多采用隔离法(高中物理最好用的方法之一),可以做到简化问题,方便分析!

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。祝愿每一位读者生活愉快!谢谢!


回复「进群」即可进入无广告技术交流群。同时送上250本电子书+学习视频作为见面 有你想看的精彩 大佬终于把鸿蒙OS讲明白了,收藏了!
开源!基于SpringBoot的车牌识别系统(附项目地址)
几句话,离职了
还在用分页?太Low !试试 MyBatis 流式查询,真心强大!
图解 ElasticSearch 原理
分享一套仿英雄联盟大型多人联机实时对战游戏源码(包含完整服务器和客户端源码)
目前5000+ 人已关注加入我们

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

  1. 面试官:1 到 1000 之间有多少个 7?

    大家好,我是乔戈里. 这两天看到一个很有意思的面试题:考官直接问,1 到 1000 到多少个 7? 要求,不编程,直接给出答案,并简单给出思路. 第一种思路 首先应该有个合理的归类,我一开始就想到了一 ...

  2. C++经典面试算法题

    #include <assert.h> #include <string.h> #include <stack>// // C++ 经典面试算法题 [7/28/20 ...

  3. Java常见的面试算法题:实现两个线程交替打印1到100的数

    Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...

  4. 常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可)

    常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可) 比较典型的题目,如下有: 题目一: 1.启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程 ...

  5. 力扣高频算法php_互联网公司最常见的面试算法题有哪些?

    很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试! 为什么?你在提前准备复习的时候,在网上找了半天相应题目的分析文章,但你看了就是不懂. 你在面试的时候,卡壳了,一时间忘了怎么 ...

  6. 【笔试面试题】腾讯2013实习生面试算法题及参考答案

    总结了一下自己遇到的以及同学遇到的面试算法题,是技术二面. 有几道题给出了参考答案,还有几道没有好的思路.路过的大侠如果有好的思路请留个言交流下呗~ 1.八数码问题:3*3的格子,有1~8个数,空了一 ...

  7. 互联网公司最常见的面试算法题大集合!

      转载于 新智元   来源:Github 编辑:元子 [导读]LeetCode是一个美国的在线编程网站,收集了各个大厂的笔试面试题,对找工作的毕业生和开发者来说,非常有价值.很多求职者都会在Leet ...

  8. 一道小面试算法题的思路

    一道小算法题的思路 有这么一道小面试算法题:给定一个长度为 n 的整数数组,下标为 i 的元素表示第 i 天某个股票的价格,每次最多持有一股,每次买卖最多一股,在最多只买卖一次的情况下(先买后卖,不考 ...

  9. 常考面试算法题类型总结(来自知乎)

    作者:牛客网 链接:https://www.zhihu.com/question/24964987/answer/200681301 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  10. 【常见笔试面试算法题12】动态规划算法案例分析

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 文章目录 1.暴力搜索方法 2.记忆搜索方法 3.动态规划方法 4. ...

最新文章

  1. 因果关系:真的存在吗?
  2. Verilog testbench总结(二)
  3. 温州大学《深度学习》课程课件(十、人脸识别与神经风格迁移)
  4. Felgo简介--Qt开发者的福音
  5. 手动制作linux live,Linux下Live USB如何制作
  6. UProceduralMeshComponent
  7. LeetCode 1625. 执行操作后字典序最小的字符串(BFS)
  8. 黑莓Torch 9800,了无新意落后主流机型
  9. vue-cli学习入门_byKL
  10. Delphi使用两种不同方法获取系统端口信息--(装载)
  11. Bootstrap+Angularjs自制弹框
  12. [CodeForces - 276A] Lunch Rush
  13. css基础--正文颜色和背景
  14. 微信小程序云开发教程-WXSS入门-样式的使用
  15. 模拟某个浏览器抓取数据
  16. java timezone 中国_Java中TimeZone类的常用方法
  17. 怎样在电脑桌面上设置员工生日提醒 每年准时提醒生日的便签
  18. Android、iPhone和Java三个平台一致的加密方法
  19. 前端面试-浏览器原理
  20. IPv6-GRE 隧道技术

热门文章

  1. 【无标题】二级目录二级目录二级目录二级目录
  2. Windows下查找网络硬盘、断开网络硬盘
  3. 用HTML CSS JS 实现一个工作招聘平台展示响应式网站
  4. 图像模式识别 (二)
  5. HCIP——NAT网络地址转换
  6. ChatGPT怎么看?禾赛科技登陆纳斯达克,能否扛起“中概激光雷达第一股”的大旗?...
  7. 尾插法建立单链表 数据结构
  8. Firefox 此链接不安全去除
  9. PLMN USIM STK EHPLMN TMSC Server, msc sERVER, IW-MSC Server GMSC IAM
  10. iis7设置dz论坛url静态化经验