文章目录
问题描述:解题思路:代码实现:复杂度分析:
问题描述:
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
示例 1:
输入:n
= 3
输出:
3
示例 2:
输入:n
= 11
输出:
0
解题思路:
这题的难度主要在于找规律,经过推到发现规律如下: 根据规律进行解题,首先确定n所在的数字的位数;然后确定n所在的数字num;最后确定n是num中的那一位。
参考文章连接: 数字序列中某一位的数字
代码实现:
public int findNthDigit(int n
) {
int digit
= 1;
long start
= 1;
long count
= 9;
while(n
>count
) {
n
-= count
;
digit
++;
start
*= 10;
count
= start
*digit
*9;
}
long num
= start
+ (n
-1)/digit
;
return Long
.toString(num
).charAt( (n
-1)%digit
) - '0';
}
提交结果:
复杂度分析:
时间复杂度:O(longN)空间复杂度:O(longN)