Leetcode 400. Nth digits

解法一: 一个几乎纯数学的解法

numbers:   1,...,9, 10, ..., 99, 100, ... 999, 1000 ,..., 9999, ...

# of digits:   9     +  90*2   +  900*3 + 9000*4 + ...

利用这个公式可以很容易的求出来Nth digit出现在一个几位数上。假设出现在一个4位数上。那么我们应该从1000的第一个1开始往后数 n - (9 + 90*2 + 900*3)个digits。那么第n个digits应该出现在那个4位数上呢?可以用L17算出来这个数是1000后面的第几个自然数, e.g. 5。res为最后剩余的digits的个数,这个res<=4。那么我们应该找 '1005' 中的第res-1个digit。

 1 class Solution(object):
 2     def findNthDigit(self, n):
 3         """
 4         :type n: int
 5         :rtype: int
 6         """
 7         sum = 0
 8         i = 1
 9         while n > sum + i*9*10**(i-1):
10             sum += i*9*10**(i-1)
11             i += 1
12         start = 10**(i-1) 
13         step = (n - sum - 1)//i
14         res = n - sum - step*i
15         return int(str(start + step)[res-1])

 

posted @ 2016-12-25 15:25  lettuan  阅读(161)  评论(0编辑  收藏  举报