剑指offer-面试题44-数字序列中某一位的数字-脑筋急转弯
/*
题目:
数字以0123456789101112131415…的格式序列化到一个字符序列中。
在这个序列中,第5位(从0开始计数,即从第0位开始)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
*/ #include<iostream>
#include<string.h> using namespace std; //自己实现pow,使用codeblocks中的pow,会转化为浮点数进行截断,得到的结果不准确。
int pow(int num,int digits){ int res = 1;
for(int i = 0; i < digits; i++){
res *= num;
}
return res;
}
/*
解法一:
一个数字一个数字遍历,当数字位数之和超过n,则所需数字在遍历到的最后一个数字。
*/
int NumberOfSequence1(int n){
if(n < 0) return -1;
int currNumber = 0;
int myCount = 0;
while(myCount <= n){
myCount += to_string(currNumber).size();
currNumber++;
}
return to_string(currNumber-1)[n-myCount+to_string(currNumber-1).size()] -'0';
} /*
解法二:
0~9中有10个数,10~99有2*90=180个数,100~999有3*900=2700个数
例1001,可以有10+180<1001 && 10+180+2700>1001,所以要找的数在100~999中
1001-10-180=881,881/3=270,881%3=1,所以要找的数在100+270=370中
其中截止到369有810个数字,3为第811个数字,7为第812个数字,0为813个数字
从0开始计数,则7为811位数字。
*/
int NumberOfSequence2(int n){
if(n < 0) return -1;
if(n < 9) return n; int myCount = 10;
int i = 2;
while(myCount <= n){
myCount = myCount + (int)i*9*pow(10,i-1);
i++;
}
int temp = n - (myCount - (i-1)*9*pow(10,i-2));
int res_index= temp%(i-1);
int res_val = (temp / (i - 1) + pow(10,i-2)); return to_string(res_val)[res_index] - '0';
} int main(){
cout<<NumberOfSequence2(1500000)<<endl;
cout<<NumberOfSequence1(1500000)<<endl;
}
剑指offer-面试题44-数字序列中某一位的数字-脑筋急转弯的更多相关文章
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- 剑指 Offer 44. 数字序列中某一位的数字 + 找规律 + 数位
剑指 Offer 44. 数字序列中某一位的数字 Offer_44 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author Wale ...
- C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...
- 《剑指offer》第四十四题(数字序列中某一位的数字)
// 面试题44:数字序列中某一位的数字 // 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中.在这 // 个序列中,第5位(从0开始计数)是5,第13位是1, ...
- 【Offer】[44] 【数字序列中某一位的数字】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 数字以0123456789101112131415..的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是 ...
- 《剑指offer》面试题44. 数字序列中某一位的数字
问题描述 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等. 请写一个函数,求任意第n位 ...
- 每日一题 - 剑指 Offer 44. 数字序列中某一位的数字
题目信息 时间: 2019-07-01 题目链接:Leetcode tag: 规律 难易程度:中等 题目描述: 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个 ...
- 剑指 Offer 44. 数字序列中某一位的数字
题目描述 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等. 请写一个函数,求任意第n位 ...
- 剑指offer——46数字序列中某一位的数字
题目: 数字以0123456789101112131415…的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等.请写一个函数,求任意第n位对应的数 ...
随机推荐
- VirtualBox桥接网络,设置虚拟机联网,连接VirtualBox虚拟系统中的数据库等
由于最近搭建一个项目自己的阿里云的服务器内存不足,自己笔记本使用VitrualBox电脑虚拟linux系统来搭建,把这次使用过程遇到的问题记录下来也能帮助遇到同样的小伙伴. 软件: VirtualBo ...
- CSS的常用单位介绍
①px: 像素单位:它是英文单词pixel的缩写,意思为像素,即构成图片的每一个点,为图片显示的最小单位.它是一个绝 对尺寸单位,是固定的. ②em: 相对长度单位:它是英文单词emphasize的缩 ...
- eclipse导入项目时的一些准备
导入前的工作: 1.因为别人项目的运行环境可能和我们不一样,所以首先要在要导入的项目里面找到.setting文件,修改下面的xml文件,这个文件里面是关于服务器的一些配置的信息,你可以改成与你电脑一样 ...
- Java使用反射实现根据字符串类名及参数创建对象
要根据字符串创建对象,可以使用 Class.forName(String) 方法: 而要新建一个可以指定初始值参数的对象,就必须得使用 getConstructor(Class<T>... ...
- sqlserver install on linux chapter two
The previous chapter is tell us how to install sqlerver on linuix Today, we will see how to make it ...
- Django表单Form类对空值None的替换
最近在写项目的时候用到Form,发现这个类什么都好,就是有些空值的默认赋值真是很不合我胃口. 查阅资料.官方文档后发现并没有设置该值的方式.于是,便开始了我的踩坑之路...... 不过现在完美解决了, ...
- 分组密码CBC加密缺陷
title: 分组密码CBC加密缺陷 date: 2017-05-15 10:04:47 tags: ["密码学"] --- 关于密码学的种种漏洞以及利用网上也有不少,但是比较零散 ...
- centos7 安装 iRedmail 后 给nginx添加虚拟主机
iRedmail安装参考官方文档和 https://ywnz.com/linuxyffq/4563.html 准备工作 更新操作系统 yum update -y 安装必要组件 yum install ...
- Kubernetes 部署 Nginx Ingress Controller 之 nginxinc/kubernetes-ingress
更新:这里用的是 nginxinc/kubernetes-ingress ,还有个 kubernetes/ingress-nginx ,它们的区别见 Differences Between nginx ...
- U盘制作macOS Sierra的启动盘
1.macOS Sierra的几种安装方式 *开机时按住command+option+r 进行联网在线安装.PS:在网速好的情况还行,但是如果网络差的时候,它会让你崩溃的. *使用光盘进行安装. *今 ...