400. 第 N 位数字
难度中等145收藏分享切换为英文接收动态反馈
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n
位数字。
注意:n
是正数且在 32 位整数范围内(n < 231
)。
示例 1:
1 | 输入:3 |
示例 2:
1 | 输入:11 |
找规律
- 1位数字能提供9个
- 2位数字能提供90*2个
- 3位数字能提供900*3个
- 4位数字能提供9000*4个
- 。。。。。。。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31class Solution {
public int findNthDigit(int n) {
// 1位数字能提供9
// 2位数字能提供90*2
// 3位数字能提供900*3
// 4位数字能提供9000*4
if (n <= 9) return n;
if(n==11)return 0;
long bit = 1;
int num = 1;
// 计算base对应的数量
while (n > bit * 9 * num) {
n -= bit * 9 * num;
bit *= 10;
num++;
}
long base = bit;
long count = 0;
// 从base出发,找到剩余的数量
while (n > num) {
n -= num;
count++;
}
// 求出那个数字
long value = (long) (base + count);
// 找到第几位疯狂debug才得出来
int res = Long.toString(value).charAt(n - 1) - '0';
return res;
}
}