剑指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位对应的数 ...
随机推荐
- python人脸识别
需要掌握知识python,opencv和机器学习一类的基础 过一段时间代码上传github,本人菜j一个,虽然是我自己谢的,也有好多不懂,或者我这就是错误方向 链接:https://pan.baidu ...
- python中线程共享资源问题的解决
线程跟进程有些相似,有时被称作轻量级的进程,但不同的是,所有的线程运行在同一个进程中,共享相同的运行坏境. 进程和线程都是实现多任务的一种方式,例如:在同一台计算机上能同时运行多个QQ(进程),一个Q ...
- myeclipse 项目引入 com.sun.image.codec.jpeg 的api报错解决方法
今天在做压缩图片的功能的时候发现JDK自带的jar找不到的问题,网上找到一个方法,实测可行,这边记录下: 在Eclipse中处理图片,需要引入两个包: import com.sun.image.c ...
- VC运行时库/MD、/MDd、/MT、/MTd说明
http://blog.csdn.net/holybin/article/details/26134153 VC运行时库设置:VC项目属性->配置属性->C/C++->代码生成-&g ...
- Android之SimpleAdapter简单实例和SimpleAdapter参数说明
SimpleAdapter基本上认知了其参数含义 用起来就简单多了 SimpleAdapter的参数说明 第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要 第二个参数表示生 ...
- 分析Ajax爬取今日头条街拍美图-崔庆才思路
站点分析 源码及遇到的问题 代码结构 方法定义 需要的常量 关于在代码中遇到的问题 01. 数据库连接 02.今日头条的反爬虫机制 03. json解码遇到的问题 04. 关于response.tex ...
- 前端:CSS第四章第一节
块级元素一行只有一个,比如P标签 CSS层叠样式表,意思就是样式是可以叠加的,比如下面的代码 <style> .ok{ color: aqua; } .blue{ color: #5283 ...
- Dapper系列 作者:懒懒的程序员一枚
Dapper 第一篇简单介绍什么是小巧玲珑?Dapper如何工作安装需求方法参数结果常用类型 Dapper 第二篇 Execute 方法介绍描述存储过程Insert语句Update语句Delete语句 ...
- 【Bullet引擎】复杂碰撞体 —— btCompoundShape
说明 API文档:http://bulletphysics.org/Bullet/BulletFull/classbtCompoundShape.html btCompoundShape可用于创建不规 ...
- Tomcat安装教程及常见错误解决方法
目录 Tomcat安装教程及常见错误解决方法 一.安装前准备 ·熟悉自己电脑的操作系统版本(32位or64位) ·保证电脑上已经装好JDK,并且已经设置好环境变量. 二.Tomcat安装教程(以Tom ...