题目描述

  数字以0123456789101112131415..的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。

[牛客网刷题地址] 无

思路分析

  1. 数字位数为1时 ,共有10个1位数
  2. 数字位数为2时 ,共有9*10个2位数
  3. 数字位数为3时 ,共有9*(10^2)个3位数
  4. ...
  5. 数字位数为m时 ,共有9*(10^(m-1))个m位数

当给出序列号为index时,我们可以跳过比个数比index小的m位个数(要累加)。详见代码

测试用例

  1. 功能测试:输入10、190、 1000 等。
  2. 边界值测试:输入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));
}
}

代码链接

剑指Offer代码-Java

【Offer】[44] 【数字序列中某一位的数字】的更多相关文章

  1. 剑指 Offer 44. 数字序列中某一位的数字 + 找规律 + 数位

    剑指 Offer 44. 数字序列中某一位的数字 Offer_44 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author Wale ...

  2. 《剑指offer》第四十四题(数字序列中某一位的数字)

    // 面试题44:数字序列中某一位的数字 // 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中.在这 // 个序列中,第5位(从0开始计数)是5,第13位是1, ...

  3. 每日一题 - 剑指 Offer 44. 数字序列中某一位的数字

    题目信息 时间: 2019-07-01 题目链接:Leetcode tag: 规律 难易程度:中等 题目描述: 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个 ...

  4. 剑指 Offer 44. 数字序列中某一位的数字

    题目描述 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等. 请写一个函数,求任意第n位 ...

  5. 《剑指offer》面试题44. 数字序列中某一位的数字

    问题描述 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等. 请写一个函数,求任意第n位 ...

  6. 剑指offer——46数字序列中某一位的数字

    题目: 数字以0123456789101112131415…的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等.请写一个函数,求任意第n位对应的数 ...

  7. 数字序列中某一位数字(《剑指offer》面试题44)

    由于这道题目在牛客上没有,所以在此记录一下. 一.题目大意: 数字以0123456789101112131415…的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数,即从第0位开始)是5 ...

  8. 剑指offer-面试题44-数字序列中某一位的数字-脑筋急转弯

    /* 题目: 数字以0123456789101112131415…的格式序列化到一个字符序列中. 在这个序列中,第5位(从0开始计数,即从第0位开始)是5,第13位是1,第19位是4,等等. 请写一个 ...

  9. CF628D Magic Numbers (数据大+数位dp)求[a,b]中,偶数位的数字都是d,其余为数字都不是d,且能被m整除的数的个数

    题意:求[a,b]中,偶数位的数字都是d,其余为数字都不是d,且能被m整除的数的个数(这里的偶数位是的是从高位往低位数的偶数位).a,b<10^2000,m≤2000,0≤d≤9 a,b< ...

随机推荐

  1. shardingjdbc 强制路由走主库查询实时数据 避免主从同步数据延迟

    @Beanpublic shardingsphere.demo.entity.Order order(){ shardingsphere.demo.entity.Order order=new Ord ...

  2. js 数组对象深拷贝

    js 数组对象深拷贝 结论:对象的拷贝不能采用直接赋值的方式. 背景 踩过的坑如下: formData本来是父组件传过来的,但是我不想直接用,于是我直接赋值给一个formDataCopy的对象. 但是 ...

  3. mac下使用zerobrane调试cocos2dx的lua

    环境:MacOSx 10.9.2, Lua 5.1.4, luaSocket 2.0.2, xcode5.0.2 所需文件 luasocket-2.0.2.zip,ZeroBraneStudioEdu ...

  4. java8(二)方法引用

    方法引用让你可以重复使用现有的方法定义,并像 Lambda 一样进行传递. 方法引用可以被看作仅仅调用特定方法的 Lambda 的一种快捷写法. 事实上,方法引用就是让你根据已有的方法实现来创建 La ...

  5. Win服务程序编写以及安装一般步骤

    Win服务程序编写以及安装一般步骤 Windows服务的优点有:1. 能够自动运行.2. 不要求用户交互.3. 在后台运行.本文将介绍常见服务程序编写的一般步骤以及注意事项. 设计服务程序实例: 创建 ...

  6. 为什么双重检查锁模式需要 volatile ?

    双重检查锁定(Double check locked)模式经常会出现在一些框架源码中,目的是为了延迟初始化变量.这个模式还可以用来创建单例.下面来看一个 Spring 中双重检查锁定的例子. 这个例子 ...

  7. Linux 下用C语言连接 sqlite

    1.在 /home/ 新建一个文件夹名为 sqlite #cd /home #mkdir sqlite 2.编写C语言代码,名称为 sql.c,代码如下 // name: sql.c // This ...

  8. Python 類別 class 的繼承 Inheritance

    既然 Python 是面向物件 Object Oriented 語言,它就有類別 Class 與物件 Object 的概念. 甚麼是類別 class ? 簡單講: 類別好比蓋房子的施工藍圖 Blue ...

  9. 解放双手——相机与IMU外参的在线标定

    本文作者 沈玥伶,公众号:计算机视觉life,编辑部成员 一.相机与IMU的融合 在SLAM的众多传感器解决方案中,相机与IMU的融合被认为具有很大的潜力实现低成本且高精度的定位与建图.这是因为这两个 ...

  10. [ PyQt入门教程 ] PyQt+socket实现远程操作服务器

    来需求了..干活啦.. 需求内容 部分时候由于缓存刷新.验证码显示不出来或者浏览器打不开或者打开速度很慢等原因,导致部分测试同事不想使用浏览器登录服务器执行命令.期望有小工具可以替代登录浏览器的操作, ...