第 N 位数字

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。

  • 输入:n = 3
    输出:3

  • 输入:n = 11
    输出:0
    解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是 0 ,它是 10 的一部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var findNthDigit = function (n) {
// 小于10返回本身
if (n <= 9) {
return n;
}
let bit = 1; // 数字的长度
let p = 9;
while (n - bit * p > 0) {
n -= bit * p;
bit++;
p *= 10;
}

// num 目标数字
let num = Math.pow(10, (bit - 1)) + Math.ceil(n / bit) - 1;
let pos = n % bit; // 在num中的位置
pos = pos === 0 ? bit : pos;

return Math.floor(num / Math.pow(10, bit - pos) % 10);

};