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
考點
- 考查做優化的激情和能力。最直觀的方法很多人都能想到。當面試官提示還有更快的方法後,千萬不要輕易放棄嘗試。雖然想出好的方法不容易,但要展示自己追求更快算法的激情,多嘗試不同的方法,必要的時候可以要求面試官給出提示,但不能輕易說自己想不出來並且放棄努力。
- 考查面對複雜問題的思維能力。需要有嚴密的數學思維能力,並且還要通過分析具體的例子一步步找到通用的規律,才能想出更好的算法。這些能力在實際工作中面對複雜問題的時候都非常有用。