这道题的题目意思...emmm....;
1,2,3,4,5,6,7,8,9,10 只有这10种而已。(21也是0)
解题参考的:(这真的是简单题吗??怀疑人生)
https://blog.csdn.net/hy971216/article/details/80724403
https://blog.csdn.net/Aurora_ym/article/details/81904133
# 这里首先分析一下位数和规律
# 个位数:1-9,一共9个,共计9个数字
# 2位数:10-99,一共90个,共计180个数字
# 3位数:100-999,一共900个,共计270个数字
# 4位数,1000-9999,一共9000个,共计36000个数字
# 以此类推,
# 这样我们就可以首先定位到是哪个数,再找到其对应的数字
class Solution(object):
def findNthDigit(self, n):
"""
:type n: int
:rtype: int
"""
length = 1
base = 1
while(n>9*length*base):
n -= 9*length*base
length+=1
base*=10
# print(n) # 2
# e.g. 二位数的第一个数字,是10
curNum = (n-1)//length+base # 将数字还原,11(th)指向的是10,还原10;
# print(curNum) # 10
# 判断是11(th)指向的是数10的第几位,即指向的是0还是1;
# 如果指向的是第0位,则是1;指向第1位,则是0;
point = (n-1)%length # 指向第0位,还是第1位
# print(point)
digit = 0
while (point<length):
# print(i) # 0,1 (如果是2位数)
digit = curNum%10 # 个位数
curNum //= 10 # 十位数
point += 1
# print(digit)
# print(curNum)
return digit
方法2:(我好笨)
class Solution(object):
def findNthDigit(self, n):
"""
:type n: int
:rtype: int
"""
for i in range(1, 10):
if n - 9 * 10 ** (i - 1) * i <= 0:
k = i
break
else:
n -= 9 * 10 ** (i - 1) * i
base = 10 ** (k - 1)
str_n = str(base + (n - 1) // k)
return (int(str_n[(n-1) % k]))
草稿。。。怕之后忘记了