【Offer】[44] 【数字序列中某一位的数字】
时间:2019-08-19
本文章向大家介绍【Offer】[44] 【数字序列中某一位的数字】,主要包括【Offer】[44] 【数字序列中某一位的数字】使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
数字以0123456789101112131415..的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。
[牛客网刷题地址] 无
思路分析
- 数字位数为1时 ,共有
10
个1位数 - 数字位数为2时 ,共有
9*10
个2位数 - 数字位数为3时 ,共有
9*(10^2)
个3位数 - ...
- 数字位数为m时 ,共有
9*(10^(m-1))
个m位数
当给出序列号为index时,我们可以跳过比个数比index小的m位个数(要累加)。详见代码
测试用例
- 功能测试:输入10、190、 1000 等。
- 边界值测试:输入0、1等。
Java代码
public class Offer044 {
public static void main(String[] args) {
test1();
test2();
test3();
}
public static int digitAtIndex(int index) {
return Solution1(index);
}
private static int Solution1(int index) {
if(index<0) {
return -1;
}
int m=1; // m位数
while(true) {
int numbers = countOfIntegers(m);//得到m位数的个数
if(index<numbers*m) {//如果 序列号小于 m位数所占的位数
return getDigit(index,m);
}
index -= m*numbers;
m++;
}
}
/**
* 得到m位数的个数
* m=1时 0~9 10个
* m=2时 10~99 9*10
* m=3时 100~999 9*(10^2)
* @param m
* @return
*/
private static int countOfIntegers(int m) {
if(m==1) {
return 10;
}
return (int) (9*Math.pow(10, m-1));
}
/**
* 获取数字
* @param index
* @param m
* @return
*/
private static int getDigit(int index, int m) {
int number = getFirstNumber(m)+index/m; //对应的m位数
int indexFromRight = m-index%m; //在数字中的位置
for(int i=1;i<indexFromRight;i++)
number/=10;
return number%10;
}
/**
* m位数的首个数字
* m=1, 0
* m=2, 10
* m=3, 10^2
*
* @param m
* @return
*/
private static int getFirstNumber(int m) {
if(m==1)
return 0;
return (int) Math.pow(10,m-1);
}
private static void test1() {
System.out.println(digitAtIndex(1000));
}
private static void test2() {
System.out.println(digitAtIndex(0));
}
private static void test3() {
System.out.println(digitAtIndex(1));
}
}
代码链接
原文地址:https://www.cnblogs.com/haoworld/p/offer44-shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi.html
- Docker 虚拟机之 Redis
- Spring boot with HTTPS SSL
- Spring boot with Git version
- Spring boot with Elasticsearch 5.5.1
- 怎样将 MySQL 数据表导入到 Elasticsearch
- Spring data 数据库建表(一对一,一对多,多对多)
- Apache Sqoop 将mysql导入到Hadoop HDFS
- Redis 4.0.0 一键安装脚本,CentOS 7 systemd 完美启动
- Spring boot with Apache Hive
- Apache Hive 快速入门
- CentOS 7.3 + Server JRE 1.8 + Hadoop-2.8.0
- Apache Hbase 快速入门
- Mototrbo TMS 协议分析(数字电台短信协议分析)
- Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pytorch+Unet图像分割:将图片中的盐体找出来
- html 用浏览器打开中文乱码解决方法
- SQLServer 数据库字符集、版本号sql语句查询语法
- chrome 浏览器自保留端口、安全端口有哪些?chrome不能访问某个端口的环境网址,但是其它的浏览器可以访问原因及解决办法。
- MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
- MobaXterm工具连接Linux服务器入门使用手册,国产化泰山服务器连接工具使用演示
- Linux 服务器配置信息查询方法,国产化申威服务器配置信息查看演示
- 达梦数据库、oracle数据库如何判断指定表有没有建立索引?对应的表有没有索引查询方法
- Linux服务器运行sh文件提示权限不够解决方法?飞腾服务器Permission denied问题授权方法
- 不支持图形化界面的Linux系统如何显示图像化界面?飞腾服务器显示图像化界面方法,DISPLAY environment variable is undefined问题解决方法
- 一分钟学Python| Python的函数(上)
- 数据分析与数据挖掘 - 07数据处理
- MySql8.0.19最新版本创建用户分配权限演示,You have an error in your SQL syntax权限分配问题解决方法
- linux服务器oracle数据库导出dmp文件功能演示,备份数据库命令。exp命令显示command not found解决方法,EXP-00028: 无法打开dmp进行写入问题解决
- oracle数据库exp命令导入导出dmp文件演示,oracle数据库备份还原功能