面试算法题:1 到 1000 之间有多少个 7?
公众号关注 “阿拉奇学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 到 1000 之间有多少个 7?
大家好,我是乔戈里. 这两天看到一个很有意思的面试题:考官直接问,1 到 1000 到多少个 7? 要求,不编程,直接给出答案,并简单给出思路. 第一种思路 首先应该有个合理的归类,我一开始就想到了一 ...
- C++经典面试算法题
#include <assert.h> #include <string.h> #include <stack>// // C++ 经典面试算法题 [7/28/20 ...
- Java常见的面试算法题:实现两个线程交替打印1到100的数
Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...
- 常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可)
常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可) 比较典型的题目,如下有: 题目一: 1.启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程 ...
- 力扣高频算法php_互联网公司最常见的面试算法题有哪些?
很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试! 为什么?你在提前准备复习的时候,在网上找了半天相应题目的分析文章,但你看了就是不懂. 你在面试的时候,卡壳了,一时间忘了怎么 ...
- 【笔试面试题】腾讯2013实习生面试算法题及参考答案
总结了一下自己遇到的以及同学遇到的面试算法题,是技术二面. 有几道题给出了参考答案,还有几道没有好的思路.路过的大侠如果有好的思路请留个言交流下呗~ 1.八数码问题:3*3的格子,有1~8个数,空了一 ...
- 互联网公司最常见的面试算法题大集合!
转载于 新智元 来源:Github 编辑:元子 [导读]LeetCode是一个美国的在线编程网站,收集了各个大厂的笔试面试题,对找工作的毕业生和开发者来说,非常有价值.很多求职者都会在Leet ...
- 一道小面试算法题的思路
一道小算法题的思路 有这么一道小面试算法题:给定一个长度为 n 的整数数组,下标为 i 的元素表示第 i 天某个股票的价格,每次最多持有一股,每次买卖最多一股,在最多只买卖一次的情况下(先买后卖,不考 ...
- 常考面试算法题类型总结(来自知乎)
作者:牛客网 链接:https://www.zhihu.com/question/24964987/answer/200681301 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- 【常见笔试面试算法题12】动态规划算法案例分析
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 文章目录 1.暴力搜索方法 2.记忆搜索方法 3.动态规划方法 4. ...
最新文章
- 因果关系:真的存在吗?
- Verilog testbench总结(二)
- 温州大学《深度学习》课程课件(十、人脸识别与神经风格迁移)
- Felgo简介--Qt开发者的福音
- 手动制作linux live,Linux下Live USB如何制作
- UProceduralMeshComponent
- LeetCode 1625. 执行操作后字典序最小的字符串(BFS)
- 黑莓Torch 9800,了无新意落后主流机型
- vue-cli学习入门_byKL
- Delphi使用两种不同方法获取系统端口信息--(装载)
- Bootstrap+Angularjs自制弹框
- [CodeForces - 276A] Lunch Rush
- css基础--正文颜色和背景
- 微信小程序云开发教程-WXSS入门-样式的使用
- 模拟某个浏览器抓取数据
- java timezone 中国_Java中TimeZone类的常用方法
- 怎样在电脑桌面上设置员工生日提醒 每年准时提醒生日的便签
- Android、iPhone和Java三个平台一致的加密方法
- 前端面试-浏览器原理
- IPv6-GRE 隧道技术
热门文章
- 【无标题】二级目录二级目录二级目录二级目录
- Windows下查找网络硬盘、断开网络硬盘
- 用HTML CSS JS 实现一个工作招聘平台展示响应式网站
- 图像模式识别 (二)
- HCIP——NAT网络地址转换
- ChatGPT怎么看?禾赛科技登陆纳斯达克,能否扛起“中概激光雷达第一股”的大旗?...
- 尾插法建立单链表 数据结构
- Firefox 此链接不安全去除
- PLMN USIM STK EHPLMN TMSC Server, msc sERVER, IW-MSC Server GMSC IAM
- iis7设置dz论坛url静态化经验