题目:
在无限的整数序列 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的一部分。
参考解答:
https://blog.csdn.net/IT_job/article/details/80419971
这道题就是要找规律。
个位数:1-9,一共9个,共计9个数字
2位数:10-99,一共90个,共计180个数字
3位数:100-999,一共900个,共计270个数字
4位数,1000-9999,一共9000个,共计36000个数字 36000=4*9*10**(4-1)
......
class Solution(object):
def findNthDigit(self, n):
"""
:type n: int
:rtype: int
"""
#第一步确定n是在几位数里,第二步是确定在几位数的第几位数字的第几位
#第一步
digit=1#位数
while n>digit*9*10**(digit-1):
n-=digit*9*10**(digit-1)#减去该位数的数字数目再算下一位
digit+=1
#第二步,这时的n已经是从这个几位数的开头开始的n了
a=int((n-1)/digit)#得到几位数的第几位数字,序号从0开始,所以是(n-1)
b=int((n-1)%digit)#得到几位数的第几位数字的第几位
num=10**(digit-1)+a#得到第几位数字是多少
res=list(str(num))[b:b+1]#数字转字符再转列表把第几位数的第几位切出来
return int(''.join(res))#列表转字符再转数字