首页 > 其他分享 >数字序列中某一位的数字

数字序列中某一位的数字

时间:2023-03-01 20:56:21浏览次数:40  
标签:10 digit 数字 int sum 一位 start 序列

数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。

输入:2,返回:2

输入:10,返回:1

我们尝试来找一下规律:

  • 小于10的数字一位数,1~9,共9个数字,9位;
  • 小于100的数字两位数,10~99,共90个数字,180位;
  • 小于1000的数字三位数,100~999,共900个数字,2700位;

 

public int findNthDigit (int n) {
//记录n是几位数
int digit = 1;
//记录当前位数区间的起始数字:1,10,100...
long start = 1;
//记录当前区间之前总共有多少位数字
long sum = 9;
//将n定位在某个位数的区间中
while(n > sum){
n -= sum;
start *= 10;
digit++;
//该区间的总共位数
sum = 9 * start * digit;
}
//定位n在哪个数字上
String num = String.valueOf(start + (n - 1) / digit);
//定位n在数字的哪一位上
int index = (n - 1) % digit;
return num.charAt(index) - '0';
}

标签:10,digit,数字,int,sum,一位,start,序列
From: https://www.cnblogs.com/MarkLeeBYR/p/17169740.html

相关文章