剑指offer 面试题44 python版+解析:数字序列中的某一位的数字

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mabozi08/article/details/88904400

在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 个数字。

思路:找规律

比如要求第1001位

1~9只有一位数字,是序列的前9位,跳过

10~99有两位数字,是接下来的180位,跳过

100~999有三位数字,是接下来的2700位,1001-10-180=811<2700,所以第811位是某个三位数中的一位。由于811 = 270*3+1,所以第811位是从100开始的第270个数字即370的中间一位,也就是7。

class Solution(object):
    def findNthDigit(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n<0:
            return -1
        len_number = 1
        while True:
            numbers = 9 * pow(10, len_number-1)  #len_number位的数字有多少个
            if n <= numbers*len_number:
                a = (n-1)/len_number
                b = (n-1)%len_number
                num = pow(10, len_number-1)+a
                for i in range(len_number-1-b):
                    num = num/10
                return num%10
            n = n-len_number*numbers
            len_number+=1
            print("n",n)
        return -1

猜你喜欢

转载自blog.csdn.net/mabozi08/article/details/88904400