题目
解题思路
-
1位数:1~9,共9个,占了19=9位;
-
2位数:10~99,共90个,占了290=180位;
-
3位数:100~999,共900个,占了3*900=2700位;
…… -
m位数:共9*100(m-1)个,占了m*9*100(m-1)位。
-
具体步骤:
确定n所在数字的位数,记为 digit;
确定n所在的数字,记为 num;
确定n是num中的哪一数位,并返回结果。
Code
class Solution {
public int findNthDigit(int n) {
int digit = 1;
//n所在数字的位数
long start = 1;
//n所在的数字
long count = 9;
//是num中的哪一数位
while(n>count){
n -= count;
digit++;
start *= 10;
count = 9*start*digit;
}
long num = start + (n-1)/digit;
int index = (n-1)%digit;
//将数字拼接后转化成字符串,依次读取每个字符,并通过ASCII值转化回整型
String s = String.valueOf(num);
int i = s.charAt(index) - '0';
return i;
}
}
代码运行截图