在无限的整数序列 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的一部分。
先解释下题目的意思:数字序列:1,2,3,4,5,6,7,8,9,1,0,1,1,1,2,1,3,1,4.。。。
若N为11,则输出0
class Solution(object):
def findNthDigit(self, n):
"""
:type n: int
:rtype: int
"""
"""
个位数: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)
......
"""
#第一步确定n是在几位数里,第二步是确定在几位数的第几位数字的第几位
#第一步
digit=1#位数
while n>digit*9*10**(digit-1):
n-=digit*9*10**(digit-1)
digit+=1
#第二步
a=int((n-1)/digit)#得到几位数的第几位数字
b=int((n-1)%digit)#得到几位数的第几位数字的第几位
num=10**(digit-1)+a#得到第几位数字是多少
print(num,str(num))
res=list(str(num))[b:b+1]#数字转字符再转列表把第几位数的第几位切出来
return int(''.join(res))#列表转字符再转数字
f=Solution()
print(f.findNthDigit(120))