LeetCode刷題值400Python第N個數字
阿新 • • 發佈:2019-01-01
題目:
在無限的整數序列 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))#列表轉字元再轉數字