1. 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
示例 1:输入:n = 3输出:3示例 2:输入:n = 11输出:0
思路:
- 必须通过位数来分辨不同的区间
- 步骤:
- 确定在某个区间
- 确定该区间的起始数
- 确定给定的数指向的是当前区间的哪个数
- 取余求得指向这个数的第几位
- 要确定一个区间,必须求取每个区间对应多少位数,循环减去上一个区间的数,判断减去后的数是否小于下个区间数。
- 这里区间开头的数 start = 10 * start(上个区间的开头,第一个区间的开头数为1)
- 区间中数的总数 count = 9 start dight(位数)
class Solution { public int findNthDigit(int n) { int dight = 1; // 记录位数 long count = 9; // 当前区间中数的个数 long start = 1; // 当前区间开始的数 // 确定在那个区间 while(n>count){ n-=count; dight++; start*=10; count = 9*start*dight; } long num = start + (n-1)/dight; // 确定这个数 return Long.toString(num).charAt((n-1)%dight)-'0'; } }
