给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位数字。
示例 1:
输入:n = 3
输出:3
示例 2:
输入:n = 11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。
1.直接计算。
class Solution {
public int findNthDigit(int n) {
int d = 1, count = 9;//d表示位数,count表示这个位数有多少数字
//寻找第n位数是几位数
while (n > (long) d * count) {//注意int类型可能会溢出
n -= d * count;//总位数减去当前位数的数字的位数之和
d++;//位数加1
count *= 10;//位数为d的数字总和乘10
}
int index = n - 1;//剩余的位数,因为start当作0,所以这里使用n-1
int start = (int) Math.pow(10, d - 1);//计算出这个位数下的起始下标
int num = start + index / d;//第n位位于哪个数字
int digitIndex = index % d;//那个数字中的第几位
int digit = (num / (int)(Math.pow(10, d - digitIndex - 1))) % 10;//计算那个数字,先将改为数字移动到最低位,再对10取余
return digit;
}
}
题源:力扣