【面試題44】數字序列中某一位的數字

在這裏插入圖片描述
Python題解

class Solution:
    def digitAtIndex(self, index):
        def countOfIntegers(digits): #某個數位內個數,如3位數900個
            if digits == 1:return 10
            count = int(pow(10, digits-1))
            return 9 * count
        def beginNumber(digits): #某個數位的開始數,如3位數-100
            if digits == 1:return 0
            return int(pow(10, digits-1))
        def helper(index, digits): #在某個數位範圍之內
            number = beginNumber(digits) + index//digits
            indexFromRight = digits - index % digits
            for i in range(1, indexFromRight):
                number //= 10
            return number % 10
        if index < 0:return -1
        digits = 1
        while True:
            numbers = countOfIntegers(digits)
            if index < numbers*digits:
                return helper(index, digits)
            index -= digits * numbers
            digits += 1
        return -1

考點

  • 考查做優化的激情和能力。最直觀的方法很多人都能想到。當面試官提示還有更快的方法後,千萬不要輕易放棄嘗試。雖然想出好的方法不容易,但要展示自己追求更快算法的激情,多嘗試不同的方法,必要的時候可以要求面試官給出提示,但不能輕易說自己想不出來並且放棄努力。
  • 考查面對複雜問題的思維能力。需要有嚴密的數學思維能力,並且還要通過分析具體的例子一步步找到通用的規律,才能想出更好的算法。這些能力在實際工作中面對複雜問題的時候都非常有用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章