【劍指offer】序列中的某一位數字
阿新 • • 發佈:2018-12-08
題目描述
數字以01234567891011121314…的格式序列化到一個字元序列中,在這個序列中,從0開始數,第5位是5,第13位是1,第19位是4,等等,請寫一個函式,求任意第n位對應的數字。
求出每一位對應的數字總和,然後判斷。注意邊界條件不好處理時,可以採用while true的形式
class Solution:
def countOfIntegers(self, digit):
if digit == 1:
return 10
return 9 * (10 ** (digit - 1))
def beginNum (self, digit):
if digit == 1:
return 0
else:
return 10 ** (digit - 1)
def getDigit(self, digit, index):
beginNum = self.beginNum(digit)
endNum = beginNum + int(index / digit)
leftIndex = index % digit
endNumString = str(endNum)
return endNumString[leftIndex]
def digitAtIndex(self, index):
if index < 0:
raise Exception('input error')
digit = 1
while True:
numbers = self.countOfIntegers(digit)
if index < digit * numbers:
return self. getDigit(digit, index)
index -= numbers * digit
digit += 1
print(Solution().digitAtIndex(0))
print(Solution().digitAtIndex(1))
print(Solution().digitAtIndex(9))
print(Solution().digitAtIndex(13))
print(Solution().digitAtIndex(19))
print(Solution().digitAtIndex(1001))
>>>>
0
1
9
1
4
7