本文参考自《剑指offer》一书,代码采用Java语言。

更多:《剑指Offer》Java实现合集  

题目 

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

思路

  逐一枚举数字,计算每个数字的位数相加,效率太低。

  观察规律:

  个位数的个数一共有10个,即0~9,共占了10*1位数字;

  两位数的个数一共有90个,即10~99,每个数字占两位,共占了90*2位数字;

  ……

  m位数的个数一共有9*10^(m-1)个,每个数字占m位,占了9*10^(m-1)*m位数字。

  判断第n个对的数字是属于几位数,再从几位数中进行寻找。

测试算例 

  1.功能测试(输入19、1000等)

  2.边界值测试(输入0、1等)

Java代码

//题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这
//个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一
//个函数求任意位对应的数字。 public class DigitsInSequenc {
public int digitAtIndex(int index) {
if(index<0)
return -1;
int m=1; //m位数
while(true) {
int numbers=numbersOfIntegers(m); //m位数的个数
if(index<numbers*m)
return getDigit(index,m);
index-=numbers*m;
m++;
}
} /*
* 返回m位数的总个数
* 例如,两位数一共有90个:10~99;三位数有900个:100~999
*/
private int numbersOfIntegers(int m) {
if(m==1)
return 10;
return (int) (9*Math.pow(10, m-1));
} /*
* 获取数字
*/
private 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位数
* 例如第一个两位数是10,第一个三位数是100
*/
private int getFirstNumber(int m) {
if(m==1)
return 0;
return (int) Math.pow(10, m-1);
} public static void main(String[] args) {
DigitsInSequenc demo=new DigitsInSequenc();
System.out.println(demo.digitAtIndex(0)==0);
System.out.println(demo.digitAtIndex(1)==1);
System.out.println(demo.digitAtIndex(19)==4);
System.out.println(demo.digitAtIndex(1000)==3);
System.out.println(demo.digitAtIndex(1001)==7);
System.out.println(demo.digitAtIndex(1002)==0);
}
}

  

收获

  1.程序逻辑要整理清楚,细节要注意

更多:《剑指Offer》Java实现合集  

  

【Java】 剑指offer(44) 连续子数组的最大和的更多相关文章

  1. 剑指offer——44连续子数组的最大和

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  2. 剑指 Offer 42. 连续子数组的最大和 + 动态规划

    剑指 Offer 42. 连续子数组的最大和 题目链接 状态定义: 设动态规划列表 \(dp\) ,\(dp[i]\) 代表以元素 \(4nums[i]\) 为结尾的连续子数组最大和. 为何定义最大和 ...

  3. 刷题-力扣-剑指 Offer 42. 连续子数组的最大和

    剑指 Offer 42. 连续子数组的最大和 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de ...

  4. 力扣 - 剑指 Offer 42. 连续子数组的最大和

    题目 剑指 Offer 42. 连续子数组的最大和 思路1(分析数组的规律) 我们可以从头到尾逐个累加,若之前的累加和小于0,那就从丢弃之前的累加,从当前开始重新累加,同时在遍历过程中比较记录下最大值 ...

  5. 【剑指Offer】连续子数组的最大和 解题报告(Python)

    [剑指Offer]连续子数组的最大和 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  6. 《剑指Offer》- 连续子数组的最大和或最小和

    前言 本文是<剑指Offer>系列(JavaScript版)的第一篇,题目是"连续子数组的最大和或最小和". 话不多说,开始"打怪"修炼... 一. ...

  7. 【Java】 剑指offer(42) 连续子数组的最大和

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整/ ...

  8. Go语言实现:【剑指offer】连续子数组的最大和

    该题目来源于牛客网<剑指offer>专题. HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向 ...

  9. 【剑指offer】连续子数组的最大和

    个開始,到第3个为止).你会不会被他忽悠住? 输入: 输入有多组数据,每组測试数据包括两行. 第一行为一个整数n(0<=n<=100000),当n=0时,输入结束.接下去的一行包括n个整数 ...

随机推荐

  1. 信息收集之censys

    一.摘要 Censys提供了search.view.report.query.export以及data六种API接口. search接口的请求地址是https://www.censys.io/api/ ...

  2. Error while executing topic command : Replication factor: 2 larger than available brokers: 0.

    [root@hdp1 /mnt/software/maxwell-1.19.4]#kafka-topics.sh --zookeeper hdp1,hdp2,hdp3:2181 --create -- ...

  3. python3爬虫二

    1.获取列表页文章url集合: scrapy shell http://blog.jobbole.com/all-posts/ response.css('div.post-meta a.archiv ...

  4. 实现开发板与ubuntu的共享--根文件系统NFS--Samba共享【sky原创】

    虚拟机要选择桥接,并且禁用有线和无线网卡,开启本地连接,本地连接属性要写如下:     ip地址是在连上板子后,windows   cmd  下  ipconfig得出的 板子的网线最好连接交换机或者 ...

  5. js 、c# 编码解码

    escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@ ...

  6. mtk 无线配置文件生效过程

    openwrt 下无线接口的配置文件位于 /etc/config/wirless 中. 启动 /sbin/wifi 脚本后,生效过程如下: (1)通过 uci2dat 工具生成所需要的 .dat文件 ...

  7. Qt5.8 在windows下mingw静态编译

    官方对编译一些条件介绍:https://doc.qt.io/qt-5/windows-requirements.html 在默认情况下,用QtCreator编译程序时,使用的是动态编译.编译好的程序在 ...

  8. zabbix通过简单命令监控elasticsearch集群状态

    简单命令监控elasticsearch集群状态 原理: 使用curl命令模拟访问任意一个es节点可以反馈的集群状态,集群的状态需要为green curl -sXGET http://serverip: ...

  9. zabbix系列(一)centos7搭建zabbix3.0.4服务端及配置详解

    1.安装常用的工具软件 yum install -y vim wget centos7关闭防火墙 systemctl stop firewalld.service systemctl disable ...

  10. centos重启报错Umounting file systems:umount:/opt:device is busy

    系统重启报错: Umounting file systems:umount:/opt:device is busy 只能硬关机,回想一下最近刚安装了nod32 for linux x64的杀毒软件,开 ...