版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mabozi08/article/details/88904400
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字。
思路:找规律
比如要求第1001位
1~9只有一位数字,是序列的前9位,跳过
10~99有两位数字,是接下来的180位,跳过
100~999有三位数字,是接下来的2700位,1001-10-180=811<2700,所以第811位是某个三位数中的一位。由于811 = 270*3+1,所以第811位是从100开始的第270个数字即370的中间一位,也就是7。
class Solution(object):
def findNthDigit(self, n):
"""
:type n: int
:rtype: int
"""
if n<0:
return -1
len_number = 1
while True:
numbers = 9 * pow(10, len_number-1) #len_number位的数字有多少个
if n <= numbers*len_number:
a = (n-1)/len_number
b = (n-1)%len_number
num = pow(10, len_number-1)+a
for i in range(len_number-1-b):
num = num/10
return num%10
n = n-len_number*numbers
len_number+=1
print("n",n)
return -1