在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字。
注意:
n 是正数且在32位整数范围内 ( n < 231)。
示例 1:
输入:
3
输出:
3
示例 2:
输入:
11
输出:
0
说明:
第11个数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是0,它是10的一部分。
解
通过观察发现:
一位数个数:9
两位数个数:90 * 2
三位数个数:90 * 3
所以解题思路为先判断是多到位数,在定位到具体是那个数字,最后在判断是在数字中的那个位置。
public int findNthDigit(int n) {
long t = n;
long size = 1; // 位数
long max = 9;
while(n > 0 ){
if (t - max * size > 0){
t = t - max * size;
max = max * 10;
size++;
}else{
long num = t / size;
long left = num % size;
if(0 == left)
return (int) (((long) Math.pow(10,size-1)-1 + num) % 10);
else
return (int) (((long)Math.pow(10, size-1)+num)/((long)Math.pow(10, (size-left)))%10);
}
}
return 0;
}
网友评论