1. 程式人生 > >【劍指offer】序列中的某一位數字

【劍指offer】序列中的某一位數字

題目描述
數字以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